在MenuDlg窗口中,打开Dlg1:
void CMenuDlg::OnBnClickedBtndlg1()
{
CDlg1* dlg = new CDlg1(this);
dlg->Create(DLG1,this);
dlg->ShowWindow(SW_SHOW);
}
然后在Dlg1中退出按钮代码中:
void CDlg1::OnBnClickedExit()
{
    DestroyWindow();
}
重载PostNcDestroy:
void CDlg1::PostNcDestroy()
{
CDialog::PostNcDestroy();
delete this;
}
发现窗口是关闭了,PostNcDestroy()也执行了,但是占用的内存并没有释放,退出程序,内存可以释放掉。
怎样才能把占用的内存释放掉呢?

解决方案 »

  1.   

    CDlg1* dlg = new CDlg1(this); 
    dlg->Create(DLG1,this); 
    dlg->ShowWindow(SW_SHOW); 
    delete dlg;void CDlg1::OnBnClickedExit() 

       // DestroyWindow(); 

    重载PostNcDestroy: 
    void CDlg1::PostNcDestroy() 

    CDialog::PostNcDestroy(); 
    //delete this; 
    } 再试试
      

  2.   

    兄弟,你直接把窗口delete了,怎么显示
      

  3.   

    你这个方法是CSDN标准的办法,你说占用资源没释放是根据什么?不能看内存没减少就判定没释放,毕竟一个对话框占内存不多
      

  4.   

    void CDlg1::PostNcDestroy() 

    CDialog::PostNcDestroy(); 
    delete this; 
    AfxMessageBox("test");
    } 如果弹出messagebox,那么delete执行了,内存应该释放了。
      

  5.   

    你在新窗口加一个很大的数组成员试试,要能明显看的出内存变化的,因为windows是分页内存,如果一个页面没满,那么new delete一个小数据是不影响的,因为它要分配一个页面的内存或者在原页面里使用的,
      

  6.   

    还有,DestroyWindow最好在OnCacel()中重载,去掉CDialog::Oncacel();
    不然如果人家不是按按钮,而是按的右上角的X关闭就有内存泄露了
      

  7.   

    说错,不会有内存泄漏,只是,在OnCancel() 重载会比较安全点,因为有时候会调用OnCancel()r 的,那样就会调用基类的EndDialog(),出错
      

  8.   

    这是wince中的程序,wince内存少,而且程序一直运行,所以一定要确定马上释放,否则慢慢的就用完了。奇怪的是,不管用什么方法,就是释放不掉。
      

  9.   

    你试过NEW一个很大内存的对话框没?那样子内存的变化是很明显的,我认为小内存上的new 和delete不一定会引起占用内存变化,毕竟微软的内存是一页一页分配的,频繁的new delete变引起页面数变化的,占用内存会越来越多的