首页 文章

如何确定调用哪个析构函数[关闭]

提问于
浏览
-2

我有一个函数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 回答

  • 1

    来自MSDN

    当一个对象超出范围或被删除时,其完全销毁中的事件序列如下:调用类的析构函数,并执行析构函数的主体 . 非静态成员对象的析构函数以它们出现在类声明中的相反顺序调用 . 构造这些成员时使用的可选成员初始化列表不会影响(构造或)销毁的顺序 . (有关初始化成员的更多信息,请参阅初始化基础和成员 . )非虚拟基类的析构函数以与声明相反的顺序调用 . 虚拟基类的析构函数以声明的相反顺序调用 .

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

相关问题