`

c++ 定位内存泄漏代码段的方法(Detected memory leaks!)

 
阅读更多

Detected memory leaks!Dumping objects ->{98500} normal block at 0x05785AD0, 152 bytes long. Data: << N N x 7 > 3C AC 4E 10 00 00 00 00 BC A4 4E 10 78 B6 37 00 Object dump complete. 而且每次退出都是一样的.泄漏的内存块都是98500.

解决方法:

1. 在程序开始启动的地方(足够前的地方,只要在泄漏的内存分配的前面)使用代码:

_CrtSetBreakAlloc(98500); //98500为上面内存泄漏的块号.

2. 然后debug运行,程序自动断点在"内存块98500"分配的位置:

 

/* break into debugger at specific memory allocation */if(_crtBreakAlloc != -1L && lRequest == _crtBreakAlloc) _CrtDbgBreak(); 

 

 

3 .我们已经找到了泄漏的那块内存分配的底层操作的地方了(好拗口!).

这个时候我们利用 "调试" –> "退出" ,快捷键为:"Shift + F11" .

跳出当前函数..然后一直往"上"跳,边跳边查看调用栈.直到看到了自己写的代码,例如我的

std::ifstream* origStream =newstd::ifstream(); 

 

4 .这个时候我已经可以判断 origStream 分配了内存,但是没有合理释放.处理后再次运行就没有出现内存泄漏了.

5.最后,记得把_CrtSetBreakAlloc(98500); 这句话删除掉,不然每次都断点,岂不是烦死..

----------------------------------------------------------------------------------------------------------

关于内存泄漏检测,有一个Visual Leak Detector ,按照它的介绍的确很不错,可以直接具体到代码行指出内存泄漏

分享到:
评论

相关推荐

    Detected memory leaks简单检测方法

    本文档将详细介绍一种简单的内存泄漏检测方法,帮助开发者快速定位并解决Detected memory leaks问题。 #### 内存泄漏基础知识 内存泄漏是指程序中已分配的堆内存由于某些原因未能被释放或无法访问,导致这部分内存...

    windows下c++内存泄露检测工具使用方

    该工具能够在开发阶段帮助开发者发现并定位内存泄露问题,从而有效地提高代码质量和程序稳定性。 ### 安装与配置 VLD 的安装过程相对简单,只需下载 VLD 的压缩包,并解压到任意目录即可。压缩包中包含了 `vld.h`,...

    vs2008内存泄露的查找

    Detected memory leaks! Dumping objects -&gt; C:PROGRAM FILES\VISUAL STUDIO\MyProjects\leaktest\leaktest.cpp(20) : {18} normal block at 0x00780E80, 64 bytes long. Data: &lt; &gt; CD CD CD CD CD CD CD CD CD ...

    VLD内存泄漏检测工具使用

    Detected memory leaks! Dumping objects -&gt; {123} normal block at 0x000001C51010, 12 bytes long. Data: &lt; &gt; CD CD CD CD CD CD CD CD CD CD Object dump complete. 从上面的信息可以看到,VLD检测...

    VC++内存泄漏检测方式方法总结

    Detected memory leaks! Dumping objects -&gt; D:\*****.cpp(1463): {8244} normal block at 0x01AA84B8, 512 bytes long. Data: &lt;&gt;00000000000000000000000000000000 ``` 上述信息包含了内存泄漏的具体文件名、...

    检测内存泄漏检测内存泄漏

    WARNING: VisualLeakDetector detected memory leaks! ---------- Block 57 at 0x003A89C0: 4 bytes ------------ Block 57 at 0x003A89C0: 4 bytes Call Stack: -- Allocation #57 at 0x003A89C0: 4 bytes D:\test\...

    C++内存泄露检查方法

    本文介绍了一种有效的C++内存泄露检测方法,通过重定义`new`和`delete`操作符,实现了对动态内存分配和释放的全程监控,并能够在程序结束时检测和定位内存泄露的位置。这种方法不仅可以帮助开发者及时发现和修复内存...

    在Visual C++中检测和隔离记忆体泄漏

    Detected memory leaks! Dumping objects -&gt; C:\PROGRAMFILES\VISUALSTUDIO\MyProjects\leaktest\leaktest.cpp(20): {18} normal block at 0x00780E80, 64 bytes long. Data: &lt;&gt;&lt;&gt;CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD ...

    vc内存泄露检测

    Detected memory leaks! Dumping objects -&gt; C:\Temp\memleak\memleak.cpp(15): {45} normal block at 0x00441BA0, 2 bytes long. Data: &lt;AB&gt; 41 42 ... ``` 从这个输出中我们可以看出: - **内存分配序号**:`{45...

    C++中关于Crt的内存泄漏检测的分析介绍

    Detected memory leaks! Dumping objects -&gt; f:\test\memleakchecker\memleakchecker.cpp(23) : {108} normal block at 0x0003A1A8, 10 bytes long. Data: &lt; &gt; CD CD CD CD CD CD CD CD CD CD f:\test\...

    vld(Visual Leak Detector 内存泄露检测工具 源码)

     WARNING: Visual Leak Detector detected memory leaks!  ---------- Block 57 at 0x003A89C0: 4 bytes ---------- --57号块0x003A89C0地址泄漏了4个字节  Call Stack: --下面是调用堆栈  d:\test\...

    VC调试技巧--教你快速学会调试自己的程序,找出漏洞和不足

    Detected memory leaks! Dumping objects -&gt; {18} normal block at 0x00780E80, 64 bytes long. Data: &lt; &gt; CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD Object dump complete. ``` 如果输出...

    vs内存泄漏检测工具

    1、解压Visual Leak Detector.zip,解压...No memory leaks detected. Visual Leak Detector is now exiting. ps:上面用E:\install\Visual Leak Detector\lib\Win32的dll文件,跟本机系统无关,因为项目是win32项目

    centos7_XFS_报Corruption of in-memory data detected错误.docx

    在Linux系统中,CentOS 7使用XFS文件系统可能会遇到一种特定的错误:“Corruption of in-memory data detected”。这个错误通常表示系统检测到了内存中的数据损坏,这可能是因为不正常关机、硬件故障或者软件问题...

Global site tag (gtag.js) - Google Analytics