Наше приложение выходит из строя со следующей ошибкой.Многопоточный доступ в HEAP_NO_SERIALIZE heap
===========================================================
VERIFIER STOP 00000003: pid 0x2E54: multithreaded access in HEAP_NO_SERIALIZE heap
00161000 : Heap handle
00001444 : Thread owning heap lock
00003188 : Current thread trying to acquire the heap lock
00000000 :
===========================================================
Мы включили полную кучу страниц для приложения. Приложение аварийно завершает работу в случайном месте. Часто место аварии является внутренними частями STL. Во всех случаях стоп-кадр кажется поврежденным.
Приложение использует список библиотек и DLL-файлов. Все DLL-файлы и библиотеки построены с использованием многопоточной библиотеки DLL (опция командной строки /MD
).
В одной из библиотек используется метод HeapAlloc для выделения памяти в куче.
Какие методы следует использовать для идентификации аварии?
Не уверен, что это поможет, но [Здесь] (http://stackoverflow.com/a/758840/241536) - это ответ, который я написал на другой плакат о том, как использовать WinDbg. –
Необходимая информация содержится в сообщении ПРОВЕРКА ОСТАНОВКИ. У вас есть два потока, которые одновременно обрабатывают кучу без сериализации, что запрещено. Эти два потока - 1444 и 3188. Вам нужно изменить свою программу, чтобы два потока не пытались получить доступ к одной и той же куче одновременно. –