关于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;
}