我定义了一个类CMapCoverage,这个类中用CArray定义了另一个类的指针变量(CArray<CMapObject*,CMapObject*> m_pObject;),然后,我在doc类中又用CArray定义了这个类的变量:(CArray<CMapCoverage*,CMapCoverage*> m_pCoverage;),现在我想用菜单中的一个项,发消息析构掉m_pCoverage,我用了delete逐项循环清除它.结果报错,内存也不释放.但是我关掉运行的程序,它会按照我设定的析构函数清除掉,内存也得以释放.请高手大侠指教.

解决方案 »

  1.   

    CArray自己会释放分配的内存,不需要你手动去释放你的循环删除代码出错,估计只delete是不会出错了,应该是你循环的判断退出条件有问题,致使删除已经删除的项
      

  2.   

    int i,j,k,m;
    if(m_pCoverage.GetSize())
    {
    j=m_pCoverage.GetSize();
    for(i=j;i>0;i--)
    {
    if(m_pCoverage.GetAt(i-1)->m_pObject.GetSize())
    {
    m=m_pCoverage.GetAt(i-1)->m_pObject.GetSize();
    for(k=m;k>0;k--)
    delete m_pCoverage.GetAt(i-1)->m_pObject.GetAt(k-1);
    m_pCoverage.GetAt(i-1)->m_pObject.RemoveAll();
    }
    delete m_pCoverage.GetAt(i-1);
    }
    m_pCoverage.RemoveAll();
    }
    我也不太清楚,我改了很多次了,手里现在没有最近改过的,但是与此类似.