为什么会_CrtSetBreakAlloc不会导致一个断点?
-
19-09-2019 - |
题
我使用的视觉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是最低数量的漏报告
解决方案
主要的额头甩...一个"明显的"原因是,如果分配#133发生 之前 断点是设置...
这只是第一次泄露的事实发生之前我DLL得到援引。事实上,它不一定是一个泄漏的,因为我打电话 _CrtDumpMemoryLeaks
当DLL卸不当的父母应用程序是做deinitializing.
作为"可能相关的信息#4"在我原来的问题-我没有尝试一些值,但不知何故没有一个是高于133...
其他提示
这听起来像你可能会编译程序与非调试lib,例如。如果您使用的版本的lib应该打断你的应用程序,它将不会这样做。这有可能是发生这种情况是因为你使用的第3次缔约方应用程序。这也有可能是非调试dll被装载在调试一个在运行时间。
试试看,如果正确的DLL-s载于应用在调试和应用程序或DLL实际上是调试。(有时,明确需要加载dll或exe入调试器。)
这是所有我能想到的,没有看到更多细节约这个...
不隶属于 StackOverflow