为什么_CrtSetBreakAlloc不会导致断点?

Rom*_*kov 13 memory-leaks msvcrt crtdbg.h visual-c++

我正在使用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 
Run Code Online (Sandbox Code Playgroud)

地址各不相同,但{133}始终相同.

根据MSDN关于如何在内存分配编号上设置断点的说明,我应该能够通过此调用在第133次分配上设置断点:

_CrtSetBreakAlloc(133);
Run Code Online (Sandbox Code Playgroud)

我还可以在监视窗口中验证{,,msvcr90d.dll}_crtBreakAlloc确实设置为133.程序退出后,泄漏报告仍然列出#133(以及一些更高的数字),但不会发生断点.为什么会这样,我如何让断点发生?

潜在相关信息:

  1. VS2008,使用"多线程调试DLL"CRT
  2. 我的代码是由第三方产品加载的DLL
  3. "正常"断点工作正常; 踩踏工作正常; __asm int 3工作得很好.
  4. 没有其他值_crtBreakAlloc导致断点(不是我试过的那些)
  5. 133是泄漏报告中的最小数字

Rom*_*kov 9

主要的前额拍打......一个"明显"的原因是如果设置断点之前发生了#133的分配......

只是在我的DLL被调用之前发生了第一次泄漏.实际上它不一定是泄漏,因为我_CrtDumpMemoryLeaks在卸载DLL时调用- 而不是在父应用程序完成取消初始化时调用.

至于我原来的问题中的"潜在相关信息#4" - 我确实尝试了一些值,但不知何故没有高于133 ......