发现有一个动态链表每次释放后在WindowsXP的任务管理器
中程序占用的内存不减反增。不知是何原因,请指教。
for(i=0;i<=m_MapDoc.m_PolygonArray.GetUpperBound();i++)
{
       if((pa=m_MapDoc.m_PolygonArray.GetAt(i))!=NULL)
{
m_MapDoc.m_PolygonArray.RemoveAt(i);
delete pa;
// ASSERT(m_MapDoc.m_PolygonArray.GetAt(i) ==NULL);
}

}

解决方案 »

  1.   

    你用m_MapDoc.m_PolygonArray.RemoveAll()就全删除在你的循环里,你不能使用delete pa。GetAt()返回的并不是元素的地址,而是该元素的引用。RemoveAt之后,系统会自动调整数组中的元素,你不能强行释放。RemoveAt(i)之后,在i位置存放的是原来i+1位置的元素。GetAt(i)肯定不为NULL。
      

  2.   

    // example for CObArray::RemoveAllCObArray array;
    CAge* pa1;
    CAge* pa2;array.Add( pa1 = new CAge( 21 ) ); // Element 0
    array.Add( pa2 = new CAge( 40 ) ); // Element 1
    ASSERT( array.GetSize() == 2 );
    array.RemoveAll(); // Pointers removed but objects not deleted.
    ASSERT( array.GetSize() == 0 );
    delete pa1;
    delete pa2;  // Cleans up memory.
    这是MSDN上的例子,RemoveAll只能删除指针,还是要用delete去释放内存阿