Re: Unhandled exception in ntdll.dll! Как отловить?
От: Блудов Павел Россия  
Дата: 06.12.04 02:33
Оценка:
Здравствуйте, Rcorp, Вы писали:

R>Если не в отладке, то все работает на ура

Возможно, это из-за того, что при отладке под NT+ используется более другая куча, чем при "обычном" прогоне.
В результате происходит следующее:
Под отладчиком освобождённая память прописывается каким-нибудь 0xBAADF00D, а без него просто помечается как свободная.
Хуже всего то, что ошибка может быть не в Вашем коде, а где-нибудь в mshtml.dll

Под отладчиком, но не по шагам работает?
Сколько процессоров? Включена гиперниточность? Дело может быть в банальной синхронизации.
Вот пример:
void BadFunc()
{
    int nStackVar = 0;
    ::CreateThread(OtherFunc, ..., &nStackVar);
}

DWORD WINAPI OtherFunc(LPVOID pvUserArg)
{
    int nVar = *(int*)pvUserArg;
}


При пошаговом проходе управление сначала покинет функцию BadFunc, а потом попадет в OtherFunc.
В nVar попадет мусор.

Без пошагового прогона, но при наличии второго процессора или гиперниточности выполнение OtherFunc начнется до того,
как завершится вызов CreateThread. В nVar с большой долей вероятности будет нужное значение.

--Павел.
... << RSDN@Home 1.1.4 beta 2 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.