MyException - 我的异常网
当前位置:我的异常网» VC/MFC » 一个链表能否装各种绘图方法,如何释放才不泄漏

一个链表能否装各种绘图方法,如何释放才不泄漏

www.MyException.Cn  网友分享于:2013-02-20  浏览:1次
一个链表能否装各种绘图方法,怎么释放才不泄漏

鼠标按下OnMouseDown 定义NEW部分++++++++++++++++++++++++++++

if(DrawType==1)
{
Line=new CLine(XXX);
}


if(DrawType==2)
{
Ellipse=new CEllipse(XXX);
}


 鼠标放开的时候OnMouseUP
if(xxx) 
m_listDRAW.AddTail( Line); 
else
m_listDRAW.AddTail( Ellipse); 


ONDRAW显示部分++++++++++++++++++++++++++++++++++++



 
CObList *pList=&(GetDocument()->m_listDRAW);   
POSITION pos =pList->GetHeadPosition();   


if(Line->te==1)
    {
CLine* xLine=(CLine*)xList->GetNext(pos); 
    xLine->Draw(pDC);  

     }
else if(Ellipse->te==1)
     { 

  CEllipse* xEllipse=(CEllipse*)xList->GetNext(pos); 
     xEllipse->Draw(pDC);  
  } 



释放部分
POSITION pos=m_listDRAW.GetHeadPosition();
while(pos)
{
delete m_listDRAW.GetNext(pos);   
}
m_listDRAW.RemoveAll();

但是我每次释放都有内存泄漏,不知道在哪里出问题

------解决方案--------------------

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

------解决方案--------------------
引用:
引用:delete m_listDRAW.GetNext(pos);   
=============
这个语句是不是一定能成功呢?
改成这样试试:
while(pos!=NULL)
{
   p=m_listDRAW.GetHead();
   m_listDRAW.RemoveHead();
   delete p;
……


这个是每一次都取 头  然后从列表删除头 delete头的内存
循环
------解决方案--------------------
引用:
引用:
delete m_listDRAW.GetNext(pos);   
=============
这个语句是不是一定能成功呢?
改成这样试试:
while(pos!=NULL)
{
   p=m_listDRAW.GetHead();
   m_listDRAW.RemoveHead();
   delete p;
  pos=m_li……

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

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有