【发布时间】:2014-07-21 21:26:09
【问题描述】:
我有一个 MFC 对话框,名为 Dlg1
myobject* Dlg1 = new myobject();
此对话框有一个名为 A 的父对话框;我在 A 中有一个函数,在关闭时调用:
A::Destroy()
{
if(Dlg1 )
delete Dlg1; // this is triggering `DebugBreak(); here i get A.exe has triggered a breakpoint,
// the rest of the code
}
如果我关闭Dlg1 对话框,手动单击关闭按钮,然后关闭主对话框A,那么一切都很好,没问题。但是,如果Dlg1 正在运行并且我关闭了A,那么我会得到DebugBreak()。这个问题只在debug模式下出现,在release模式下没问题。
【问题讨论】:
-
'有谁知道是什么触发了这个?' 例如删除一个已经删除的指针...
-
调试堆检测到堆损坏。不错的功能。找到原因当然绝非易事。
-
调用
delete时无需检查NULL。因此,检查if(Dlg1 )对您根本没有帮助,除非您连续多次在同一个对象上调用 Destroy()。 -
@Samer '我这样做' 那么,你为什么不在你的示例中展示它呢?你认为这无关紧要吗?
-
@Samer - 此代码是否正确
myobject* Dlg1 = new myobject();?如果是这样,那么Dlg1是一个局部变量,与您在Destroy方法中的Dlg1不同,或者它是(天堂禁止)一个全局变量。
标签: c++ mfc debugbreak