今天发现程序内存泄漏,就在CxxxAPP::ExitInstance()里放了_CrtDumpMemoryLeaks语句.问题1:
在单位里调试时还可以进去exitInstance函数
我把代码带回家后再运行和调试,发现关闭程序时怎样都进不去ExitInstance()了
放个AfxMessageBox都不响应问题2:
我打开程序时,占用内存0%,
关闭窗口后,调出任务管理器发现进程没关掉,而且内存占用率激增至50%
进程没关掉应该是因为内存泄漏,但内存占用率怎么会增加那么多呢?请大家为我释疑

解决方案 »

  1.   

    哪里有循环在new吧,要不怎么会激增
      

  2.   

    检查new delete
    malloc 和 free是否成对
      

  3.   

    是有几个循环new,但内存分配不是运行程序里的new语句之后就分配好了吗?我在析构函数和退出函数里什么都没做,直接关掉窗口,内存怎么会增加?另外,第一个问题真是太奇怪了,不解决都不好进行调试了
      

  4.   

    我在析构函数和退出函数里什么都没做---------------------------------------
    什么都没做?delete也没有?
      

  5.   

    在每一个new和delete之后都加上Trace语句.其它析构,退出函数的地方也加上类似的TRACE语句,注意观察调试输出.
      

  6.   

    当然有delete,虽然漏了几个,正在补多谢大家,可是回答都不在点上.
    我知道怎样排查是那里出现了内存泄漏.可是如题产生的两个问题无法理解,
    希望谁能帮我解释下是怎么回事?
      

  7.   

    另外:
      我关闭程序按钮的代码是自写的.
      是:
        p->SendMessage(WM_SYSCOMMAND,SC_CLOSE,0);//p为MainFrame指针
      

  8.   

    内存用率激增 肯定是内存泄漏
    检查 ExitInstance 和 AfxMessageBox 之前的代码 看看哪里有 阻塞 特别是有没有循环在new
      

  9.   

    别着急
    请问你循环New的东西有必要么?
    如果没有必要的话可以改为别的代码
    New完之后必须Delete还有New的指针也要Delete哦
    包括窗体指针等等。
      

  10.   

    在窗体结束的时候必须释放所有New出来的东西
    要不内存肯定会泄漏的
      

  11.   

    问题暂时得到解决
    把    p->SendMessage(WM_SYSCOMMAND,SC_CLOSE,0);//p为MainFrame指针
    改为AfxGetApp()->PostThreadMessage(WM_QUIT,..);请问这个有什么区别吗?为什么用前者会发生错误
      

  12.   

    SendMessage是要等待 消息处理完后返回 
    p->SendMessage(WM_SYSCOMMAND,SC_CLOSE,0);这句话又是要让p即MainFrame 处理消息
    这不就阻塞了吗