Member 10918991 Ответов: 1

Ошибка : ошибка утверждения отладки в wincore.pp


Я работаю над миграцией среды разработки кода сканера из xp в win 7. Для этого я обновил код в VS 2008, все ошибки компиляции исправлены. В режиме выпуска код работает нормально. Но после установки приложения в устройство оно резко падает и закрывается при переходе назад (с помощью кнопки “Esc").

При проверке кода в режиме отладки он выдает ошибку


Debug assertion failed!
File: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp


При попытке отладить ошибку он перенаправляет меня на сегмент кода, упомянутый ниже:

BOOL CWnd::Attach(HWND hWndNew)
{
    ASSERT(m_hWnd == NULL);     // only attach once, detach on destroy
    ASSERT(FromHandlePermanent(hWndNew) == NULL);
        // must not already be in permanent map

    if (hWndNew == NULL)
        return FALSE;

    CHandleMap* pMap = afxMapHWND(TRUE); // create map if not exist
    ASSERT(pMap != NULL);

    pMap->SetPermanent(m_hWnd = hWndNew, this);


#ifndef _AFX_NO_OCC_SUPPORT
    AttachControlSite(pMap);
#endif

    return TRUE;
}


Пожалуйста, дайте мне знать, как решить эту проблему? Нужно ли исправлять какие-либо настройки проекта? Любая помощь приветствуется.. Спасибо

Что я уже пробовал:

Я пытался найти источник ошибки, но безуспешно..

1 Ответов

Рейтинг:
1

Jochen Arndt

Вы должны найти код, который вызывает Attach(). Этот Wnd для которого вызывается функция уже прикреплена (m_hWnd нет NULL) или пройденное hWndNew уже есть в постоянной карте.

Вызывающая функция может быть также из библиотеки MFC. Если это так, то вам нужно найти свой код, который в конечном итоге вызывает функцию MFC, и проверить состояние функции MFC. CWnd там.

Для этого проверьте стек вызовов, когда выполнение останавливается из-за утверждения. Если это не включает код из ваших источников, вы должны использовать точки останова, пока не узнаете свою часть кода, которая в конечном итоге приведет к утверждению.

Я не уверен насчет побочных эффектов здесь (в релизной сборке), но предполагаю, что это приведет к утечке памяти.