单击第一个对话框的一个后,调用如下的语句来生成第二个对话框:
         CSecondDlg dlg;
dlg.DoModal();
可是,关闭第二个对话框后,再点击按钮,就会报错,这是怎么回事?我是使用自动生成的“确定”按钮来关闭第二个对话框的。第二个对话框上由一个treectrl和一个listctrl控件,并且包含一些我自己定义的累的对象。是不是存在有一些对象没销毁的问题?是对话框上的控件的问题,还是我自己定义的类的对象没销毁?以下是第二个对话框对应的类中包含的对象 CListCtrl m_ListCtrl; // 列表项
CPatchList m_cpPatch; //这是一个我自己定义的类生成的对象
CServerDoc* m_pDoc;        // 指向文档的指针
CTreeCtrl m_tree;          // 声明树形控件的变量

解决方案 »

  1.   

    可能是你程序中定义的某个地方存在bug,特别是如果有什么内容和内存句柄相关的注意下看看,可能你第一次打开没有问题,说明你的程序结构上没有问题,然后某个地方的数据或着什么在你关闭后依然存在,影响了后面,导致第二次调用的时候出现错误。
      

  2.   

    是否有内存没有释放,指针是否删除并置NULL,都会造成失败
      

  3.   

    lixiaosan(小三) :我的第二个对话框中就只有
    CListCtrl m_ListCtrl; // 列表项
    CPatchList m_cpPatch; //这是一个我自己定义的类生成的对象
    CServerDoc* m_pDoc;        // 指向文档的指针
    CTreeCtrl m_tree;          // 声明树形控件的变量
    四个变量,而且唯一的指针对象,在构造函数中初始化为零的,怎么还会有没有释放的东西?
    还想问一下,什么情况会导致内存释放错误?
      

  4.   

    是不是这里有问题?
    为了传递文档指针,在第二个对话框的类中加入了一个C**Doc的对象
    C**Doc* m_SecondDoc;  // 指向文档的指针
    点击button后的响应函数如下:
    void CFirstDlg::OnBnClicked()
    {
    // TODO: 在此添加控件通知处理程序代码
    CSecondDlg dlg;
    dlg.m_SecondDoc = m_FirstDoc;  //将第一个对话框中的C**Doc指针传递过来
    dlg.DoModal();
    }
      

  5.   

    CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
    CMyView *m_pView = (CMyView *)pFrame->GetActiveView();这样得到view类指针,然后GetDoucument();
    该会了吧
      

  6.   

    小三的方法很好用,省的我将指针传来传去啦不过我的程序的问题不在这,我已经找到了
    第二个对话框中的CListCtrl有问题:为了在ClistCtrl中显示图标,我声明了两个 CImageList Cil1,Cil2;//大小图像列表但是如果将声明放在函数内,图标就显示不出来,需要在函数外部声明。但是这样,在第二次生成对话框时就会带来问题,我现在也是没办法了,有人遇到过同样的问题吗,指点一下啊
      

  7.   

    ImageList.Create
    ImageList.Add
    listCtrl.SetImageList
    大致就这个流程吧。
    放在初始画函数中。
    ImageList 和 ListCtrl一起声明,保证生命周期一致。
      

  8.   

    谢谢小猪,我的问题解决了,不过你理解的好像不太对,我的问题是这样的:
    如果将imageList的声明放在函数中就显示不了,如果放在函数的外部,就成为了一个全局变量,这是再调用这个函数,执行到ImageList.Create时就会出现错误,现在我将imageList声明成类的成员变量就解决了。谢谢大家,散分!