如何检测导致内存泄漏C ++的线路的实际位置?

时间:2012-05-31 11:17:04

标签: c++ pointers memory-leaks

我正在使用包含内存泄漏的C ++应用程序,但我使用的是“Leakdiag”和“LDGrapher”,但我不知道泄漏在哪里?! 我也在使用“_CrtDumpMemoryLeaks();”功能给我这样的结果:

etected memory leaks!
Dumping objects ->
{657} normal block at 0x00D93B98, 52 bytes long.
 Data: < N   N          > D8 4E D9 00 D8 4E D9 00 00 00 00 00 CD CD CD CD 
{656} normal block at 0x00D93AF0, 108 bytes long.
 Data: <(        ;  (   > 28 F0 12 00 00 00 00 00 98 3B D9 00 28 F0 12 00 
{655} normal block at 0x00D94ED8, 52 bytes long.
 Data: < ;   ;          > 98 3B D9 00 98 3B D9 00 CD CD CD CD CD CD CD CD 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\occcont.cpp(923) : {641} normal block at 0x00D92100, 12 bytes long.
 Data: <            > F6 06 0A 00 00 00 00 00 00 00 00 00 

我怎么知道内存泄漏的真实情况?

1 个答案:

答案 0 :(得分:0)

您可以重载全局new和delete运算符,每次使用new分配时,都会将指针的地址与__LINE____FILE__信息一起存储在某个容器中。删除某些内容时,将其从容器中删除。当您的应用程序退出时,转储容器的内容。然后,您将知道忘记取消分配的分配。您可以使用映射容器将内存地址作为键,将文件和行信息作为值。

我认为这与你可以到达内存泄漏的真实位置一样接近。