您的位置:首页 > 其它

简单内存泄漏检测方法,解决Detected memory leaks!问题 .

2013-03-19 15:53 393 查看
工作环境:WIN7,VS2005:

最近一个项目中,程序退出后,每次都出现内存泄漏,每次退出的时候泄露的内存块都是1654,1650。
Detected memory leaks!
Dumping objects ->
{1654} normal block at 0x01CC1B28, 40 bytes long.
Data:  54 00 69 00 63 00 6B 00 65 00 74 00 20 00 69 00
{1650} normal block at 0x01CC1BF0, 16 bytes long.
Data:  64 6B E8 95 68 79 0D 4E FD 80 7F 4F 28 75 00 00
Object dump complete.


解决方法

1、在程序开始的地方,加上代码:_CrtSetBreakAlloc(1654); //1654为上面内存泄漏的块号。

2、用Debug模式运行,程序自动断点在“内存块1654”分配的位置。

3、这个时候一直利用“调试”-“退出”,或快捷键“SHIFT+F11”跳转,直到看到了自己的代码。

4、检查自己在该代码中分配的内存块,是否进行了合理的释放。

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 ,按照它的介绍的确很不错,可以直接具体到代码行指出内存泄漏,但是个人使用了一下,发现debug的速度太慢了,不知道是不是我个人程序的问题.......像上面的泄漏,我用CrtSetBreakAlloc这种简单的方法就足够了....

以上引用自“天津翔鹤的空间”。

本人也遇到了,但是我的显示{403}、{402}越来越小,懂的提示一下!不排除软件自身配置问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: