Многопоточный доступ в куче HEAP_NO_SERIALIZE

Наше приложение вылетает со следующей ошибкой.

===========================================================
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 для выделения памяти в куче.

какие методы я должен использовать, чтобы идентифицировать аварию?

2 ответа

Решение

Вы, кажется, уже сделали это, запустив свою программу под WinDbg.

Быстрый поиск в Google по интересным битам сообщения об ошибке обнаружил статью MSDN Многопоточный доступ в куче HEAP_NO_SERIALIZE, которая подсказывает мне, что какой-то загружаемый вами модуль связан с однопоточным CRT.

Я бы очень внимательно изучил каждую часть вашего проекта и все настройки проекта, чтобы убедиться, что все действительно использует библиотеки MD. Что-то может быть статически связано.

Присоедините с помощью WinDbg, исправьте ваши символы:

.symfix;reload;

Запустить автоматический анализ сбоев:

!analyze -v

Вы можете проверить стеки вызовов всех потоков:

~* kb;

Вы можете проверить, каковы зависимости для ваших модулей, с помощью Dependency Walker и посмотреть, используют ли какие-либо однопоточные CRT, но я бы также проверил, статически ли связаны какие-либо из них, как предлагает Джон Диблинг.

Вы можете проверить это в настройках проекта: Свойства конфигурации -> C / C++ -> Генерация кода -> Проверка библиотеки времени выполнения. Должно быть написано "Многопоточная DLL (/MD)".

Другие вопросы по тегам