Double free()或者腐败:C ++

时间:2016-05-13 16:38:21

标签: c++

为什么我编写这样的代码( X 是泛型类)调用构造函数和析构函数

    int main()
      {
      X one ();
      one.~X();   
      return 0;
      }

给我这个错误?

Double free() or corruption:C++

2 个答案:

答案 0 :(得分:4)

你几乎从不明确地调用析构函数,当一个对象超出范围时(或delete d,如果在堆上分配),它们会被隐式调用。首先,您通过调用background手动取消分配background.~Y()的数组,接下来同一个数组会尝试在下一个}再次释放。

答案 1 :(得分:1)

调用对象的析构函数几乎总是错误的。实际上我从未遇到过这样的情况。您需要阅读有关RAII的内容,也许这个示例将帮助您了解错误原因:

#include <iostream>

struct Foo{
    Foo()  { std::cout << " constructor " << std::endl; }
    ~Foo() { std::cout << " destructor  " << std::endl; }
};

int main(){
    Foo foo;
    // foo.~Foo();  // <- never ever do this !
}                   // <- object is destroyed here !

运行此命令,您将看到已经调用了析构函数。销毁已经被破坏的物体会导致你得到的错误。