写的程序出现了应该叫"内存泄漏"的问题吧,每次运行完之后就内存就会减少,应该如何排查呢?有什么好的方法步骤呢?

解决方案 »

  1.   

    使用检测工具吧,比如BoundsChecker,能查出你所有的资源泄露并定位到你分配资源时的代码处,这样你可以知道哪些资源申请了没有释放
      

  2.   

    如果debug方式,可能有些在程序运行结束后会在debug窗口显示。
    还可以安装bouncechecker协助查找。
      

  3.   

    BoundsChecker工具还不错,调试再调试了,找内存泄露是最麻烦的了,慢慢找吧!
      

  4.   

    有些也会找不到  只能你自己慢慢的找  每个new 啊  getDC啊 之类申请空间的地方都看看 是不是已经吧内存释放了,还有使用 vector 和 map的时候小心点  也很容易导致内存泄漏
      

  5.   

    恩 同意用BoundsChecker工具,简单 方便
      

  6.   

    内存泄漏检测工具--Visual Leak Detector (VLD) 
          可以在http://www.codeproject.com/tools/visualleakdetector.asp 下载到。相比较其它的内存泄露检测工具,它在检测到内存泄漏的同时,还具有如下特点: 
    1、  可以得到内存泄漏点的调用堆栈,如果可以的话,还可以得到其所在文件及行号;2、  可以得到泄露内存的完整数据;3、  可以设置内存泄露报告的级别;4、  它是一个已经打包的lib,使用时无须编译它的源代码。而对于使用者自己的代码,也只需要做很小的改动;5、  他的源代码使用GNU许可发布,并有详尽的文档及注释。对于想深入了解堆内存管理的读者,是一个不错的选择。              可见,从使用角度来讲,Visual Leak Detector简单易用,对于使用者自己的代码,唯一的修改是#include Visual Leak Detector的头文件后正常运行自己的程序,就可以发现内存问题。从研究的角度来讲,如果深入Visual Leak Detector源代码,可以学习到堆内存分配与释放的原理、内存泄漏检测的原理及内存操作的常用技巧等。      使用方法:
    1.拷贝VLD的头文件(.h文件)到工程的Include目录下。
    2.拷贝VLD下Lib文件到工程Lib目录下。
    3.在工程头文件中(比如StdAfx.h)加入#include<vld.h>。
    4.Debug版本编译运行即可(release版本不会编译进去)。
    如果存在内存泄漏,则程序关闭后输出一栏会有详细的提示。
      

  7.   

    上面VLD和BoundsChecker都用过,说说我的感受
    1.vld很简单,vc6.0,2003都可以用,而且方法特别简单
    2.BoundsChecker安装后,只vc6.0能用,我的2003没看见那个插件。另觉得比较复杂,没有去学怎么用就卸载了,所以没体会到BoundsChecker工具的强大。