Я использую подпрограммы обнаружения утечки памяти в 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 - самое низкое число в отчете об утечке