Здравствуйте, 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 >>