C++内存泄露如何检测?

1.检查是否存在内存泄露

2.检查哪里出现内存泄露

检查内存泄露不能仅仅靠工具,需要了解代码的框架。即使检查出结果显示出现内存泄露,那也有可能是正常的,具体看你的意图了,如果代码是自己写得那应该不成问题。

如把 new xxx 压入list中。 list在其他地方remove然后delete。

所以解决内存泄露最主要的方法不是在工具,或者几行调试代码,而在于你对程序逻辑的理解。

如果单纯new出来的东西,用一个局部的指针指向。但在函数结尾没有重定向,或者delete,那必定出现内存泄露。

下面提供检查并调试内存泄露的简单方法。

思路很简单:检查内存出现泄露——》二分法定位内存泄露区域——》分析解决问题。

 

 

  为了得知一段代码中是否有内存泄漏,你可以在这段代码的开始和完成处分别拍一个快照,然后调用_crtmemdifference函数来比较两个状态:
  
  _crtmemcheckpoint( &s1 );
  // memory allocations take place here
  _crtmemcheckpoint( &s2 );
  
  if ( _crtmemdifference( &s3, &s1, &s2) ) 
  _crtmemdumpstatistics( &s3 );
  
  就像名字中暗示的那样,_crtmemdifference比较两个内存状态,并且产生一个结果(第一个参数)。把 _crtmemcheckpoint 放在程序的开始和结尾,调用_crtmemdifference 来比较结果,这也是一种检测内存泄漏的方法。如果发现内存泄漏,你可以使用_crtmemcheckpoint把程序分成两半分别使用上述方法来检测内存泄漏,这样就是使用二分法来检查内存泄漏。

 

详细见:http://blog.csdn.net/smiton/article/details/6400349  这里写得很好了。

其他:http://hi.baidu.com/ailuoli/blog/item/009defd91852b8f339012fcb.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值