怎么没有代码?
另外,就NEW了一个而已,不delete没有关系,
程序退出时,系统会自动回收该内存。

解决方案 »

  1.   

    CTreeView是你的CTreeBox的子窗口,CTreeBox关闭的时候会给CTreeView发送onclose消息,CTreeView的析构函数会间接调用delete this,就销毁了CTreeView窗口,你在CTreeBox的析构函数再delete当然会出错.解决办法:
    重栽CTreeView的postNcDestroy(大概是这个函数了),这个重栽函数不要做任何事情,即屏蔽掉delete this.可以多看看<深入浅出MFC>,如果想深究,最好直接看看MFC的源代码
      

  2.   

    解决办法:析构函数中不delete这个指针
      

  3.   

    netsky() 说的基本正确,只是delete this与析构函数并没什么关系。实际上是delete this是MFC框架在销毁一个视图的时候所作的事,
    执行的顺序是先Destroy再NCDestroy(销毁非客户区)然后才是析构函数。
    如果你跟踪MFC的源代码,可以发现CView的postNcDestroy中只有一句话
    就是delete this。一般的视图都是从CView中派生出来的,所以执行结果
    大致相当。由此可以发现一个问题,如果你是new一个视图话,不用delete也不会出错,
    但是如果你是定义了一个视图的对象,然后创建它,那么再退出的时候,
    可能发生错误,因为对象是自动释放的,如果在NCDestroy中delete,那么
    就会出现重复释放。所以当你定义的是视图对象,而不是new一个视图的时候
    就需要重载一个什么都不做的postNcDestroy函数。