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

How can i detect the real location of the line which cause the memory-Leak C++?

本文关键字:C++ 泄漏 线路 位置 真实 内存 何检测 检测      更新时间:2023-10-16

我有一个包含内存泄漏的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:ddvctoolsvc7libsshipatlmfcsrcmfcocccont.cpp(923) : {641} normal block at 0x00D92100, 12 bytes long.
 Data: <            > F6 06 0A 00 00 00 00 00 00 00 00 00 

我怎么知道内存泄漏的真正位置?

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

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