内存泄露的检测

内存泄漏——初学者听起来很牛逼的词,其实说白了就是new了以后忘记delete、malloc了以后后忘记free。以前对这个东西不以为然,为何?因为,new申请的内存块如果没有被及时delete,产生的内存碎片在程序结束时依然会被操作系统(Windows)收回。但是前不久在我项目中出现了这样的问题,结束程序后CPU使用率一直50%以上,程序也没有真正停止运行,调试运行发现一大堆类似这样的警告:

Detected memory leaks!
Dumping objects ->
{32842} normal block at 0x0EB46B18, 24 bytes long.
 Data: <                > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

.......

百度之,发现原来是我不以为然的内存泄露!因为这次用new是为了使用动态数组,由于数据较多,操作系统在回收内存碎片时就耗费了很多时间,使得程序停不下来。

 

那么怎样解决问题呢?如果是小程序,很容易找到内存泄露的地方,但是在大型项目中代码上万行,如何去找?其实MFC中本来就带有内存泄露检测机制,只要MFC工程Stdafx.h中添加一句#define new DEBUG_NEW即可。再次调试运行就可以发现区别了:

Detected memory leaks!
Dumping objects ->
F:/VC++/程序/DrillVision/Grid.cpp(163) : {2417} normal block at 0x0E90E730, 24 bytes long.
 Data: <                > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

.......

警告消息中就可以定位内存泄漏的地方了。

 

但是如果不是MFC程序,要检测内存泄露就有点麻烦了,具体办法见http://blog.vckbase.com/bruceteen/archive/2004/10/28/1130.aspx
http://hi.baidu.com/carelock/blog/item/e2fff8d16cc264d6572c8449.html

 

至于MFC内存泄露检测机制,见:

http://www-128.ibm.com/developerworks/cn/linux/l-mleak2/index.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值