У меня есть диалог 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
работает, и я закрываю, то я получаю DebugBreak()
, Эта проблема возникает только в режиме отладки, в режиме выпуска нет проблем.
Если мы предполагаем, что код, который вы разместили в своем вопросе, является фактическим кодом, который вы используете, проблема может быть в следующем:
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.
//...,
}
где SomeFunction
будет другой функцией члена A
,