在一个对话框的OnInitDialog()中:
m_pBookingManageDlg = new CBookingManageDlg;
m_pBookingManageDlg->Create(IDD_MANAGE_BOOKING_DLG,this);然后在OnCancel()中:(经debug跟踪,以下语句被执行)
m_pBookingManageDlg->DestroyWindow();
delete m_pBookingManageDlg;
m_pBookingManageDlg = NULL;但是,debug却提示我:
Dumping objects ->
...{97} client block at 0x003752D0, subtype 0, 96 bytes long.
a CDialog object at $003752D0, 96 bytes longwhy?

解决方案 »

  1.   

    我现在脑子糊涂,你试试看 delete[] m_pBookingManageDlg;
      

  2.   

    将这部分代码移到ondestroy中试试
    m_pBookingManageDlg->DestroyWindow();
    delete m_pBookingManageDlg;
    m_pBookingManageDlg = NULL;
      

  3.   

    在OnCancel中PostMessage(WM_CLOSE,0,0)试试
      

  4.   

    OnCancel()和OnClose()对窗体的影响有什么不同?
      

  5.   

    你怎么能在OnCancel执行你写的函数呢?应该发送消息到父类中然后执行你写的函数。
    假如还不行只能是你的对话框中类的代码的问题
      

  6.   

    回到OnClose()里面就OK了,因为你是在OnCANCEL()里面delete 的,所以如果通过其他方法关闭对话框时(例如点击对话框右上角的插插),就不会回收内存;但是CDialog::OnOK(),OnCANCEL(),和点击关闭,这几种关闭对话框的方法都会触发Close事件,即都会调用OnClose()函数,所以delete应该放到OnClose()里面
      

  7.   

    m_pBookingManageDlg->DestroyWindow();
    delete m_pBookingManageDlg;去掉第一句,直接delete即可
      

  8.   

    m_pBookingManageDlg->DestroyWindow();
    delete m_pBookingManageDlg;
    m_pBookingManageDlg = NULL;你一旦m_pBookingManageDlg->DestroyWindow();
    窗体就不复存在了
    这个时候m_pBookingManageDlg这个指针也就不知道指到什么地方去了,不信你再试试