为什么在删除对象时获取DebugBreak()

时间:2014-07-21 21:26:10

标签: c++ mfc debugbreak

我有一个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()。此问题仅在调试模式下发生,在发布模式下没有问题。

1 个答案:

答案 0 :(得分:2)

如果我们假设您在问题中发布的代码是您正在使用的实际代码,则问题可能是:

myobject* Dlg1 = new myobject();

请注意,Dlg1是局部变量,而不是成员变量。然后你有这个:

A::Destroy()
{
  if (Dlg1 )
     delete  Dlg1; 
}

上面代码中的Dlg1是类或结构Dlg1的成员变量A。由于您的代码错误地在本地创建了动态对象,因此很可能从未初始化过。在未初始化的指针上发出delete会造成严重破坏。

如果这是问题,那么为了解决这个问题,一个建议是在某个地方:

A::SomeFuntion()
{
    //...
    Dlg1 = new myobject();  // set the member variable Dlg1, not a local variable.
    //...,
}

其中SomeFunctionA的另一个成员函数。