Вылетает сообщение "Debug Assertion Failed"!!!
При запуске exe'шника вылетает сообщение с надписью "Debug Assertion Failed". Среда - Visual Studio 2005. Архитектура приложения - Dialog Based. Подскажите в чем проблема. Скрин ниже...
В 17 строке ошибка.
Попробуй запустить в режиме отладки (по F5). Когда вылетит Assert нажми на кнопку "Повтор". Среда тебя перекинет на строчку, которая вызывает этот Assert
Цитата: Alexandoros
В 17 строке ошибка.
А собственно, с чего вы взяли, что ошибка в 17 строке?
И уверены ли вы, что ошибка в модуле afxwin?
Для автора:
Процедура assert обычно используется для обнаружения логи-
ческих ошибок в программе.
Следовательно, в каком-то месте, не выполнилась проверка.
Устанавливайте брейкпоинт, ищите эту самую проверку.
Код:
_AFXWIN_INLINE UINT_PTR CWnd::SetTimer(UINT_PTR nIDEvent, UINT nElapse, void (CALLBACK* lpfnTimer)(HWND, UINT, UINT_PTR, DWORD)) { ASSERT(::IsWindow(m_hWnd)); return ::SetTimer(m_hWnd, nIDEvent, nElapse, lpfnTimer); }
И ошибка вылетает при закрытии на след. строке:
Код:
_AFXWIN_INLINE BOOL CWnd::KillTimer(UINT_PTR nIDEvent){ASSERT(::IsWindow(m_hWnd)); return ::KillTimer(m_hWnd, nIDEvent); }
Вечерело. А ёжики все падали и падали.....
Цитата: D-Luxe
Отладчик находит ошибку в файле afxwin2.inl. Причем ошибка вылетает при запуске на такой строке:
И ошибка вылетает при закрытии на след. строке:
Код:
_AFXWIN_INLINE UINT_PTR CWnd::SetTimer(UINT_PTR nIDEvent, UINT nElapse, void (CALLBACK* lpfnTimer)(HWND, UINT, UINT_PTR, DWORD)) { ASSERT(::IsWindow(m_hWnd)); return ::SetTimer(m_hWnd, nIDEvent, nElapse, lpfnTimer); }
И ошибка вылетает при закрытии на след. строке:
Код:
_AFXWIN_INLINE BOOL CWnd::KillTimer(UINT_PTR nIDEvent){ASSERT(::IsWindow(m_hWnd)); return ::KillTimer(m_hWnd, nIDEvent); }
Повторюсь, ASSERT требуется для контроля логики программы.
Следовательно ошибку надо искать в сторону ::IsWindow(m_hWnd).
Хотя Alexandoros вас направил в более верном направлении... Все телепаты на ТНТ переметнулись...
мне честно говоря это напомнило ошибку, которая возникала при попытке обновить данные формы (UpdateData()) в отдельном потоке (как оказалось, так делать нельзя).
Автор - проййдись в конце концов по стэку вызовов еще с места падения, посмотри значения переменных в дебагере.
Решил проблему!!! У меня SetTimer стоял в конструкторе класса Dialog, а KillTimer в деструкторе. Поставил SetTimer в OnInitDialog(), KillTimer перед OnOK() и АЛЛИЛУЙЯ!!!
Ну не удивительно - при создании таймера для окна - окна еще не было.