首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

关于delete的弱智有关问题

2012-01-29 
关于delete的弱智问题问题:为什么deletePointList.GetNext(pos)后PointList内的CPoint*指针仍然不是0x000

关于delete的弱智问题
问题:   为什么delete   PointList.GetNext(pos);   后PointList内的CPoint*指针仍然不是0x00000呢?这样写delete内存是否有问题?   呵呵..对内存的new与delete的确很文盲.


typedef   CList <CPoint*,   CPoint*&>   CPointList;

class   CDerivPointList   :   public   CPointList
//在以下函数中给CPoint     new内存,
void   CEncapsulateADO::GetPointArray(CDerivPointList   &m_List_Point)
{
        CPoint*   point=new   CPoint();
point-> x=LONG(double(TempDate)*10000);
point-> y=LONG(TempParam*10000);
m_List_Point.AddTail(point);
}
在以下函数释放
void   CDerivListCtrl::OnDrawPolyLine()
{
      ……..
      ……..
      //释放内存
POSITION   pos=PointList.GetHeadPosition();
while   (pos!=NULL)  
{
PointList.GetNext(pos)=NULL;
delete   PointList.GetNext(pos);
}
}




[解决办法]
你先将PointList.GetNext(pos)的CPoint*指针都设置为NULL了,再delete这个指针也没用吧,堆上的内存也没释放,应该这样写:
delete PointList.GetNext(pos);
PointList.GetNext(pos)=NULL;


[解决办法]
delete PointList.GetNext(pos);
好像有点问题,pos是原来的链头,而你第一次就调用了GetNext,那么第一个就无法删除了。
我对CList不了解,我不知道对不对
[解决办法]
POSITION pos = PointList.GetHeadPosition();
while (pos != NULL)
{
CPoint *p = PointList.GetNext(pos);
PointList.RemoveAt(pos);
delete p;
}

热点排行