就是分配了内存资源,但是没有及时释放,甚至程序退出的时候也没有释放。虽然 WIN32 程序在退出时 OS 回收所有的内存资源,但是如果一个程序频繁分配内存而又不释放,运行很长时间会造成程序本身和整个系统的性能受影响。防止的方法就是及时释放,但是说起来容易坐起来难,特别是程序的规模大了,有时候很难定位什么地方有内存泄漏。需要良好的编程风格、习惯和规划,但不能解决全部的问题。

解决方案 »

  1.   

    内存泄漏查找有时比较困难,这时可在有怀疑的地方,按如下方式检测。代码摘自MSDN。// example for CMemoryState::CMemoryState
    // Includes all CMemoryState functions
    CMemoryState msOld, msNew, msDif;
    msOld.Checkpoint();
    CAge* page1 = new CAge( 21 );
    CAge* page2 = new CAge( 22 );
    msOld.DumpAllObjectsSince();
    msNew.Checkpoint();
    msDif.Difference( msOld, msNew );
    msDif.DumpStatistics();The results from this program are as follows:Dumping objects ->
    {2} a CObject at $190A
    {1} a CObject at $18EA
    Object dump complete.
    0 bytes in 0 Free Blocks
    8 bytes in 2 Object Blocks
    0 bytes in 0 Non-Object Blocks
    Largest number used: 8 bytes
    Total allocations: 8 bytes你可在多处检测,再根据结果判断。
      

  2.   

    这就是内存泄漏。
    void main(){
    char *c;
    c=(char *)malloc(sizeof(char)*102400000);
    return;
    }
      

  3.   

    void main(void)
    {int *p;
     p=new int;//lost memory here
     p=net int;
     delete p;
    return;
    }
      

  4.   

    VC调试器会在一定程度上自动帮助你检测内存泄漏的,如果有内存泄漏发生,你会在DebugOutput窗口里看到大串大串的内存泄漏信息。
      

  5.   

    一般来说是用try 进行捕捉 用  catch来进行释放就行了..具体实现就自己找书啦,,到处都有的.那是系统规定的内存泄露处理.
      

  6.   

    难道不是只有在堆中(或内除中)才会发生这种事吗?在堆栈中不会发生的
    我的印象中只有用new分配内存,才会必须要手工释放内存吧?(我指VC++中)
    如果我的看法不正确,请高手指出,不胜感激.
      

  7.   

    不是只有在内存(堆)中申请才会发生泄漏吗?
    在堆栈上不会发生的
    一般用new申请内存,那么在用过之后一定要delete