解决方案 »

  1.   

    release版本也是能够调试的,关键是定位。
      

  2.   

    用BoundsChecker工具编译运行完了退出就能看到了。
      

  3.   

    (1)我是这样做的,这种方法已被证明有效,当然leakage太少会看不出来,你需要把你的有leakage的代码循环很多次:
    //Get original memory
        MEMORYSTATUS memStatusOri;
        memStatusOri.dwLength=sizeof(MEMORYSTATUS);
    ::GlobalMemoryStatus(&memStatusOri); 
        printf("Total physical memory: %d bytes\n",memStatusOri.dwTotalPhys);
        printf("Total virtual memory: %d bytes\n",memStatusOri.dwTotalVirtual);
        printf("Original available physical memory: %d bytes\n",memStatusOri.dwAvailPhys);
        printf("Original available virtual memory: %d bytes\n",memStatusOri.dwAvailVirtual);然后在程序运行的某个时刻看当前内存情况,跟初始情况相减得到memory leakage:
    //Get memory status by now
            MEMORYSTATUS memStatusCurrent;
            memStatusCurrent.dwLength=sizeof(MEMORYSTATUS);
            ::GlobalMemoryStatus(&memStatusCurrent); 
            printf("Current total physical memory: %d bytes\n",memStatusCurrent.dwTotalPhys);
            printf("Current total virtual memory: %d bytes\n",memStatusCurrent.dwTotalVirtual);
            printf("Current available physical memory: %d bytes\n",memStatusCurrent.dwAvailPhys);
            printf("Current available virtual memory: %d bytes\n",memStatusCurrent.dwAvailVirtual);
            printf("Detected physical memory leakage: %d bytes\n",memStatusOri.dwAvailPhys-memStatusCurrent.dwAvailPhys);
            printf("Detected virtual memory leakage: %d bytes\n",memStatusOri.dwAvailVirtual-memStatusCurrent.dwAvailVirtual);(2)当你没有良好的编程习惯的时候。