Я использую программы обнаружения ошибок памяти Visual CRT от <crtdbg.h>
; когда я называю _CrtDumpMemoryLeaks
один распределение сообщается последовательно при каждом вызове программы:Почему _CrtSetBreakAlloc не вызывает точку останова?
{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 по How to set breakpoints on memory allocation number, я должен быть в состоянии установить точку останова на 133 распределения с этим вызовом:
_CrtSetBreakAlloc(133);
и я также могу проверить в окне просмотра, что {,,msvcr90d.dll}_crtBreakAlloc
действительно установлен в 133 . После выхода программы в отчете об утечке по-прежнему отображается # 133 (наряду с некоторыми более высокими номерами), но точка останова не возникает. Почему это может быть и как мне получить точку останова?
Потенциально соответствующая информация:
- VS2008, используя «многопоточная отладку DLL» CRT
- Моего кода DLL, которая загружается с помощью стороннего продукта
- «Нормальные» контрольные точки работа прекрасна; пошагово работает хорошо;
__asm int 3
отлично работает. - Ни одно другое значение
_crtBreakAlloc
не вызывает прерывания либо (не те, которые я пытался так или иначе) 133 является наименьшим номером в отчете о течи
Я предполагаю, что это выгодно поставить точку останова в самом начале вашей программы, а затем установить {,, msvcr90d.dll} _crtBreakAlloc до 133 вместо вызова _CrtSetBreakAlloc (133); хотя я не уверен, что это замечание применимо в вашей ситуации. :) В любом случае, рад, что он разрешился. – Gyuri
FYI, один простой (и общий) способ, это может произойти, если ваше распределение является статическим. Например. вы сделали «std :: vector» в области файлов. – imallett