这几天内存泄漏问题搞得我很是郁闷,找半天找不到在哪里漏了,大家有什么方法或者工具去查找和处理内存泄漏问题呀?

解决方案 »

  1.   


    最简单的运行Debug版本,最后会报告在什么地方泄露了,仔细看看。
      

  2.   

    先要养成良好的编程习惯 new的就一定要delete
      

  3.   

    装一个BoundersCheck程序,当你调试的时候,它会告诉你哪里发生了内存泄漏和资源泄漏。
      

  4.   

    在使用内存之前检查指针是否为NULL。如果指针p是函数的参数,那么在函数的入口处用assert(p!=NULL)进行检查。如果是用new来申请内存,应该用if(p==NULL) 或if(p!=NULL)进行防错处理。
      

  5.   

    如果是不大的工程,建议使用BoundsChecker;
    如果工程很大,而你只修改了其中的小模块就产生Memory Leak,那么我建议你自己查,因为BoundsChecker启动的时候会比较慢,大项目的话更是如此。
    Memory Leak其实一般都是指针忘记Delete了,仔细查查看了:)
      

  6.   

    vcdebug的报告就像这个样子:
    Detected memory leaks!
    Dumping objects ->
    {412} normal block at 0x00A43C00, 36 bytes long.
     Data: <pL   ?  pL      > 70 4C A4 00 80 3F A4 00 70 4C A4 00 00 CD CD CD 
    {411} normal block at 0x00A43C50, 24 bytes long.
     Data: <P<   D  P<      > 50 3C A4 00 E0 44 A4 00 50 3C A4 00 CD CD CD CD 
    我还是看不出来在哪里漏了!郁闷!不会是cstring的问题吧,我用完cstring都没有清空.
    我new 的内存都会在最后的析构函数中释放呀
      

  7.   

    在你的每个cpp文件里都加上#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif如果你的内存全部是用new 分配的话,如果你忘了调delete,他会在Debug输出内存泄露时标明你调用new地方。
      

  8.   

    BoundsChecker 功能强大,使用又很方便,我一直用它!