delete m_listDRAW.GetNext(pos);   
=============
这个语句是不是一定能成功呢?
改成这样试试:
while(pos!=NULL)
{
   p=m_listDRAW.GetHead();
   m_listDRAW.RemoveHead();
   delete p;
  pos=m_listDRAW.GetHeadPosition();
}

解决方案 »

  1.   


    这个是每一次都取 头  然后从列表删除头 delete头的内存
    循环
      

  2.   

    我这个和你上面的区别在于,这段代码是先将对象指针从m_listDRAW中移出来,然后再delete。而你上面的代码并没有先从m_listDRAW中将对象指针移出来。p是一个临时的变量。
      

  3.   

    没有移出来很有可能delete不成功。
      

  4.   

    POSITION pos=m_listDRAW.GetHeadPosition();
    while(pos)
    {
    delete m_listDRAW.GetNext(pos);   
    }
    你在这里只是释放了一个pos,pos没有移动到下一个位置,自然释放完第一个,后面的就不会再被释放了