1

我有一个 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模式下没问题。

4

1 回答 1

2

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

myobject* Dlg1 = new myobject();

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

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

上面代码中的是class 或 structDlg1的成员变量。它很可能从未初始化,因为您的代码错误地在本地创建了一个动态对象。在未初始化的指针上发出 a将造成严重破坏。Dlg1Adelete

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

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

whereSomeFunction将是 的另一个成员函数A

于 2014-07-21T22:06:51.707 回答