简单内存泄漏检测方法 解决 Detected memory leaks! 问题
2015-08-21 20:24
351 查看
我的环境是: XP SP2 . VS2003
最近在一个项目中,程序退出后都出现内存泄漏:
而且每次退出都是一样的.泄漏的内存块都是98500.
解决方法:
1. 在程序开始启动的地方(足够前的地方,只要在泄漏的内存分配的前面)使用代码:
_CrtSetBreakAlloc(98500); //98500为上面内存泄漏的块号.
2. 然后debug运行,程序自动断点在"内存块98500"分配的位置:
3 .我们已经找到了泄漏的那块内存分配的底层操作的地方了(好拗口!).
这个时候我们利用 "调试" –> "退出" ,快捷键为:"Shift + F11" .
跳出当前函数..然后一直往"上"跳,边跳边查看调用栈.直到看到了自己写的代码,例如我的
4 .这个时候我已经可以判断 origStream 分配了内存,但是没有合理释放.处理后再次运行就没有出现内存泄漏了.
5.最后,记得把_CrtSetBreakAlloc(98500); 这句话删除掉,不然每次都断点,岂不是烦死..
转自:http://www.cnblogs.com/G_Weber/archive/2009/04/15/1436362.html
最近在一个项目中,程序退出后都出现内存泄漏:
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); 这句话删除掉,不然每次都断点,岂不是烦死..
转自:http://www.cnblogs.com/G_Weber/archive/2009/04/15/1436362.html
相关文章推荐
- 修改linux文件权限命令:chmod
- C语言指针5分钟教程
- 模态视图
- 深入理解JavaScript系列(36):设计模式之中介者模式
- 使用OpenCv库的MFC程序在退出后报内存泄露 可能解决方法
- 链表的一些操作---面试必备
- ZOJ 3878 Convert QWERTY to Dvorak
- linux下判断文件和目录是否存在[总结]
- 多线程 - 06.GCD概述
- hash 冲突处理
- java集合
- osx快捷键表示图
- 五点三次平滑法滤波 C 和 matlab代码
- 五点三次平滑法滤波 C 和 matlab代码
- Compare Version Numbers
- 深入理解JavaScript系列(35):设计模式之迭代器模式
- javascript深入理解js闭包
- iPhone屏幕尺寸
- android中TextView、TextEdit和Button的用法以及draw9patch
- XE5 Android 开发数据访问server端