我使用的视觉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(以及一些较高的数字),但不断发生。为什么会这样,我怎么得到的断发生的?

潜在相关的信息:

  1. VS2008,采用"多线程的调试DLL"CRT
  2. 我的代码是一个DLL,被载入第三方产品
  3. "正常的"断点工作只是罚款;逐步通过工作罚款; __asm int 3 工作正常。
  4. 没有其他的价值 _crtBreakAlloc 导致一个断点或者(不是那些我尝试反正)
  5. 133是最低数量的漏报告

有帮助吗?

解决方案

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

这只是第一次泄露的事实发生之前我DLL得到援引。事实上,它不一定是一个泄漏的,因为我打电话 _CrtDumpMemoryLeaks 当DLL卸不当的父母应用程序是做deinitializing.

作为"可能相关的信息#4"在我原来的问题-我没有尝试一些值,但不知何故没有一个是高于133...

其他提示

这听起来像你可能会编译程序与非调试lib,例如。如果您使用的版本的lib应该打断你的应用程序,它将不会这样做。这有可能是发生这种情况是因为你使用的第3次缔约方应用程序。这也有可能是非调试dll被装载在调试一个在运行时间。

试试看,如果正确的DLL-s载于应用在调试和应用程序或DLL实际上是调试。(有时,明确需要加载dll或exe入调试器。)

这是所有我能想到的,没有看到更多细节约这个...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top