我的环境是: XP SP2 . VS2003
最近在一个项目中,程序退出后都出现内存泄漏:
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 = new std::ifstream();
4 .这个时候我已经可以判断 origStream 分配了内存,但是没有合理释放.处理后再次运行就没有出现内存泄漏了.
5.最后,记得把_CrtSetBreakAlloc(98500); 这句话删除掉,不然每次都断点,岂不是烦死..
----------------------------------------------------------------------------------------------------------
写在后面:
关于内存泄漏检测,有一个Visual Leak Detector ,按照它的介绍的确很不错,可以直接具体到代码行指出内存泄漏,但是个人使用了一下,发现debug的速度太慢了,不知道是不是我个人程序的问题.......像上面的泄漏,我用CrtSetBreakAlloc这种简单的方法就足够了....
分享到:
相关推荐
本文档将详细介绍一种简单的内存泄漏检测方法,帮助开发者快速定位并解决Detected memory leaks问题。 #### 内存泄漏基础知识 内存泄漏是指程序中已分配的堆内存由于某些原因未能被释放或无法访问,导致这部分内存...
它不仅可以帮助开发者检测内存泄露问题,还能提供详细的错误报告,包括内存泄露的位置、大小以及分配时的具体情况等信息,极大地提高了调试效率。此外,VLD 支持多种版本的 Visual C++,并且采用 LGPL 许可证发布,...
VLD(Very Lazy Debugger)是一款功能强大且广泛使用的内存泄漏检测工具,主要用于检测C++程序中的内存泄漏问题。下面我们将详细介绍VLD内存泄漏检测工具的使用方法。 一、下载和安装 VLD内存泄漏检测工具可以从官方...
本文详细介绍了在VC++环境下进行内存泄漏检测的方法,包括常规内存泄漏检测、第三方库内存泄漏检测以及多线程环境下的内存泄漏检测。通过对这些技术的掌握和运用,可以有效提高程序的稳定性和可靠性,避免因内存泄漏...
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\...
Detected memory leaks! Dumping objects -> C:\Temp\memleak\memleak.cpp(15): {45} normal block at 0x00441BA0, 2 bytes long. Data: <AB> 41 42 ... ``` 从这个输出中我们可以看出: - **内存分配序号**:`{45...
Detected memory leaks! Dumping objects -> C:PROGRAM FILES\VISUAL STUDIO\MyProjects\leaktest\leaktest.cpp(20) : {18} normal block at 0x00780E80, 64 bytes long. Data: < > CD CD CD CD CD CD CD CD CD ...
这种静态的方法可以检测出内存泄漏及其泄漏点的文件名和行号,但是并不知道泄漏究竟是如何发生的,并不知道该内存分配语句是如何被执行到的。要想了解这些,就必须要对程序的内存分配过程进行动态跟踪。Visual ...
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项目
Detected memory leaks! Dumping objects -> C:\PROGRAMFILES\VISUALSTUDIO\MyProjects\leaktest\leaktest.cpp(20): {18} normal block at 0x00780E80, 64 bytes long. Data: <><>CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD ...
C++中利用Crt进行内存泄漏检测主要依赖于`<crtdbg.h>`头文件中的函数和宏,通过定义`_DEBUG`和`_CRTDBG_MAP_ALLOC`宏,以及使用`_CrtDumpMemoryLeaks()`和`_CrtSetBreakAlloc()`等函数,可以有效地帮助开发者发现和...
Detected memory leaks! Dumping objects -> {18} normal block at 0x00780E80, 64 bytes long. Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD Object dump complete. ``` 如果输出...
Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属代码 DirectShow开发指南源码 directUI_D DirectUI界面库 DOM应用---遍历网页中的元素 ...
Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属代码 DirectShow开发指南源码 directUI_D DirectUI界面库 DOM应用---遍历网页中的元素 ...