C++内存泄漏查找分析

2 篇文章 0 订阅

引用一篇文章:

      用C写程序,为了省事儿引用了别人一些代码,一调试程序发现:内存泄露了。程序代码量有点大,而且指针基本上都是用链表管理起来的,VC的调试器并不能给检查具体哪一行泄露。我想用C写程序的人这种情况一定跟我一样遇到过好多次,其中大多数人可能也跟我一样。依次注释和检查代码来排除这个问题~~

      最近,我又遇到了这个问题,本想到群中请教下别人有没好点儿的内存检查工具来辅助我排错,结果有幸让我得到了如下的方法:

引用原文
先查看系统的内存泄漏报告,如下:
Detected memory leaks!
Dumping objects ->
{1057} normal block at 0x01873BD0, 8 bytes long.
 Data: < <      > 1C 3C 87 01 F8 CD CD CD 
strcore.cpp(118) : {1056} normal block at 0x01873C10, 45 bytes long.
 Data: <            31  > 01 00 00 00 02 00 00 00 20 00 00 00 33 31 00 CD 
.....

然后在程序主程序的初始化中加入下列语句:
_CrtSetBreakAlloc(1057);
在中断时进行查找即可。
     这样再次启动程序时,申请 {1057} 这个内存时就会出发断点,然后栈回朔就可以定位到那个指针没释放了~~

原文地址:http://www.cppblog.com/besterChen/archive/2011/12/18/162361.html


最近写的一个程序内存泄漏得比较厉害,以前都没注意,现在来查这些问题,真是痛苦,养成良好的习惯是很重要的,项目越大,越有效。


用上面介绍的方法   _CtrSetBreakAlloc(x);  确实可以找出内存泄漏的点, 但是经我测试发现 x 其实也并不一定非常准确,x是new调用的次数,如果所有的内存都在初始化的时候分配,那很方便就断点出来,但若是运行中内存分配,那这个查出来的堆栈位置就是错误的。

所以,使用时需要注意两点:

1.  内存分配都放在初始化,运行中不分配内存。

2.  运行中一定要分配内存,则需要程序运行同样的操作步骤,才有可能查出内存泄漏的准确位置。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值