Приложение MFC падает при закрытии - PullRequest
3 голосов
/ 15 сентября 2009

У меня было рабочее приложение MFC (диалоговое приложение), я удалил часть его кнопки и добавил новую кнопку, но теперь, когда она закрывается, приложение вылетает. Сбой в одном из макросов ASSERT () . Отладочные утверждения терпят неудачу в этих строках

Файл: afxtempl.h Линия: 558

Когда я смотрю этот код, это было что-то вроде этого

template<class TYPE, class ARG_TYPE>
void CArray<TYPE, ARG_TYPE>::AssertValid() const
{
    CObject::AssertValid();

    if (m_pData == NULL)
    {
        ASSERT(m_nSize == 0);
        ASSERT(m_nMaxSize == 0);
    }
    else
    {
        // here it fails
        ASSERT(m_nSize >= 0);
        ASSERT(m_nMaxSize >= 0);
        ASSERT(m_nSize <= m_nMaxSize);
        ASSERT(AfxIsValidAddress(m_pData, m_nMaxSize * sizeof(TYPE)));
    }
}
#endif //_DEBUG

Есть какие-нибудь подсказки относительно того, что идет не так? Приложение работало отлично, когда раньше, но я все испортил.

Ответы [ 3 ]

1 голос
/ 15 сентября 2009

Я бы хотел посмотреть, что находится в трассировке стека, приводящей к утверждению, а также то, что находится в различных переменных-членах. Например, если причиной является двойное удаление, в отладочной сборке вы ожидаете увидеть значение 0xdddddddd в значении, так как распределитель отладки устанавливает для освобожденной памяти это значение.

0 голосов
/ 28 мая 2013

Несколько месяцев назад у меня возникла такая же проблема - сбой MFC при закрытии. Позже я обнаружил, что в деструкторе я пытался удалить или освободить часть памяти, которая уже удалена, но каким-то образом проходил нулевую проверку перед этим.

0 голосов
/ 15 сентября 2009

Я вижу такие сумасшедшие вещи, когда случайно получаю дубликаты идентификаторов ресурсов, определенные в resource.h. Если единственное, что вы изменили, это добавление / удаление нескольких кнопок, то сначала я проверю это, а затем попробую полностью перестроить.

...