我使用一个非模态对话框,在主程序中new一个指针,然后Create,再Show,一切正常,结果退出时,在PostNcDestroy函数中的delete this这句老是通不过,这是怎么回事?

解决方案 »

  1.   

    为什么要用PostNcDestroy呢?OnDestroy()后delete this也可以啊
      

  2.   

    本着谁创建,谁释放的原则,最好把delete也放回主程序里面
      

  3.   

    但以前俺一直这样用着,很好用的,不知这次为啥就不行,这次对话框主要是负责和oracle数据库交互,难道oracle接口中有什么细节影响?我想不通
      

  4.   

    OnDestroy中处理,不能使用delete this,使用CloseWindow,使用Create的时候返回的句柄作为参数。
      

  5.   

    有次我在OnDestroy里delete this也出过错,把delete this去掉看看
      

  6.   

    非模态,没用到析构,如果把delete this 去掉,会内存泄漏
      

  7.   

    你应该自定义一个退出时调用的函数
    void Quit()
    {
       CDialog::OnDestory();
       delete this;
    }
    不会有泄露
      

  8.   

    在父窗体中调用非模式对话框的void CNewDlg::Quit()
      

  9.   

    OnDestory内delete this没问题,关键是你释放时其它地方出毛病了,导致了析构时出错。你他细跟跟析构,看错在哪。
      

  10.   

    在主程序中new一个非模态对话框指针,然后Create,再Show,让其工作,最后在对话框的PostNcDestroy()中用delete this的方法释放曾在主框架中分配的内存,我一直都是这样做的,而且都没有问题,偏偏这个有问题,所以我想不通,故发贴问问,一般什么情况会导致delete this报错
      

  11.   

    另外,我这个对话框类里没有析构函数,非模态对话框,在WM_DESTROY的消息里就可以做释放之类的事,没必要析构函数
      

  12.   

    如果使用了lib,注意和lib的Runtime Library一致,如都是MT
      

  13.   

    好的,我明天把错误拷贝回来贴上,印象中开始是什么 called by user break point,然后按几下F5就变成了Unhandled exception in MyApp.exe:0xC0000005:Access Violation,从栈里找出报错的地方就是PostNcDestroy()函数里的delete this;,事实上我在delete this之前,重载了OnCancle()函数,并在该函数里只写了一句DestroyWindow();,销毁窗体。