首先定义一个指针CListView* m_listView然后m_listView = new CListView()
最后推出程序delete m_listView程序非法退出。不是说new的类最后需要delte么?我delete dialog没有错误,调用CListView的destroywindow也报错。我用Boundschecker检测的时候,如果new了一个dialog不delete会引起内存泄漏,但是new了一个CListView不delete却没有内存泄漏请问这是怎么回事?还有我的程序在加入新的dialog的时候内存会不停地增加,delete以后会减少一些,但是不能恢复到程序刚开始运行时候的内存占有量,这是不是内存泄漏?但是boundschecker检测没有泄漏。请各位高手赐教!!!!只有三十分了,大家不要嫌少。

解决方案 »

  1.   

    你delete的时候是不是已经出了m_listView指针的访问范围了?
      

  2.   

    // self destruction
    void CView::PostNcDestroy()
    {
    // default for views is to allocate them on the heap
    //  the default post-cleanup is to 'delete this'.
    //  never explicitly call 'delete' on a view
    delete this;
    }
      

  3.   

    不是说new的类最后需要delte么?
    =============================
    这句话说的没错,但是CXXXView不适合new CXXXView的方式创建
    因为在view窗口销毁的时候,view进行了delete this自我删除了
    正确方法是使用CXXXView::CreateObject()来创建view对象.
      

  4.   

    To rollor_phoe(柔枫):没有出指针范围,我在另外一个类里面定义了一个CListView的指针,在这个类的析构函数里delete
      

  5.   

    To YufengShi(浪子):
    但是我定义了一个指针CListView* m_listView;m_listView必须使用new给它分配资源。
    PS:您能解释一下为什么内存会不停地涨,即使delete以后也不能恢复呢?这个前提是没有检测到内存泄漏
      

  6.   

    CListView* m_listView = (CListView*)CListView::CreateObject();
      

  7.   

    To YufengShi(浪子) :
    谢谢大虾,今晚我试试看。
      

  8.   

    这个得是看你这个变量怎么在什么地方定义的了,如果是局部变量的话,用完在函数结尾就可以delete了,如果是头文件中定义的话需要在析构里delete。各种情况不一样的。详细看看构造析构和堆内存部分吧~
      

  9.   

    CListView* m_listView = (CListView*)CListView::CreateObject();生成的ListView是空的
    插入列和item的语句不管用,大虾能给一个例子么?用这个业不能解决内存增长的问题。
      

  10.   

    view不用delete,他有postncdestory里面会自动删除