-1

我有一个包含内存泄漏的 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 

我怎样才能知道内存泄漏的真实位置?

4

1 回答 1

0

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

我认为这是尽可能接近内存泄漏的真实位置。

于 2012-06-01T05:33:52.430 回答