Я использую процедуры обнаружения утечек памяти Visual CRT из <crtdbg.h>
; когда я вызываю _CrtDumpMemoryLeaks
, одно распределение сообщается последовательно при каждом вызове программы:
{133} normal block at 0x04F85628, 56 bytes long.
Data: < > B0 81 F8 04 B0 81 F8 04 B0 81 F8 04 CD CD CD CD
Адрес меняется, но {133}
всегда один и тот же.
В соответствии с инструкциями MSDN на Как установить точки останова на номер выделения памяти, я должен был бы установить точку останова на 133-ом распределении с помощью этого звоните:
_CrtSetBreakAlloc(133);
и я также могу проверить в окне просмотра, что {,,msvcr90d.dll}_crtBreakAlloc
действительно установлен равным 133. После выхода программы отчет об утечке по-прежнему отображает # 133 (наряду с некоторыми более высокими номерами), но точка останова не возникает. Почему это может быть и как мне получить точку останова?
Потенциально релевантная информация:
- VS2008, используя "многопоточную библиотеку отладки DLL" CRT
- Мой код - это DLL, загружаемая сторонним продуктом.
- "Нормальные" точки останова работают нормально; пошагово работает хорошо;
__asm int 3
отлично работает. - Никакое другое значение для
_crtBreakAlloc
также не вызывает точку останова (не те, которые я пробовал) -
133 - самое низкое число в отчете об утечке