如何确定调用哪个析构函数

时间:2012-10-18 11:50:26

标签: c++ vector heap-memory heap-corruption

我有一个函数a(),它调用另一个函数b(),其中在堆上分配特定类的对象向量并返回其指针。现在退出func a()我的程序。崩溃与堆损坏错误。调试器显示它在free func中崩溃了。我怎样才能知道哪个对象被调用的析构函数?

使用调试器我可以看到调用void __cdecl _free_base(void * pBlock),pblock的值是0x00000000646ec420 class std :: basic_ostream< char,struct std :: char_traits> std :: cout void *

这是什么意思

1 个答案:

答案 0 :(得分:1)

来自MSDN

  

当一个对象超出范围或被删除时,其完全销毁的事件序列如下:

     

调用类的析构函数,并执行析构函数体。

     

非静态成员对象的析构函数按它们在类声明中出现的相反顺序调用。用于构造这些成员的可选成员初始化列表不会影响(构造或)销毁的顺序。 (有关初始化成员的更多信息,请参阅初始化基础和成员。)

     

非虚拟基类的析构函数按声明的相反顺序调用。

     

虚拟基类的析构函数按声明的相反顺序调用。

尝试添加一些断点以查看哪个析构函数导致堆损坏错误。