зачем получать 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 работает, и я закрываю, то я получаю DebugBreak(), Эта проблема возникает только в режиме отладки, в режиме выпуска нет проблем.

1

Решение

Если мы предполагаем, что код, который вы разместили в своем вопросе, является фактическим кодом, который вы используете, проблема может быть в следующем:

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,

2

Другие решения


По вопросам рекламы [email protected]