hur.cn - 华软网

 热门搜索

关于MFC容器的使用和动态内存分配的问题

  作者:未知    来源:网络    更新时间:2011/5/13
struct Element  //基本数据类型
{
.....
}

typedef CList<Element ,Element>  Container;
Container container;


//产生对象的函数
fun()
{
Element  *pElmt=new Element;
container.AddTail(*pElmt);
}
//措置惩罚进程

while(!container.IsEmpty())
{
Element  e=container.GetHead();

{
//对 e do something
}

container.RemoveHead();
}


我大致就是那样写的,这样做会有内存泄漏的吧?应该怎么改善呢?改的欠好程序就直接溃散了啊,
新手坐等帮助。。。。。
PS:我想要的容器是行列,以前基本没用过容器的,不想用STL ,有更合适的措施吗?
---华软 网友回答---
既然加的是对象,那么加完就能够释放了

Element *pElmt=new Element;
container.AddTail(*pElmt);
delete pElmt;
---华软网友回复---
引用 1 楼 oyljerry 的回复:
既然加的是对象,那么加完就能够释放了

Element *pElmt=new Element;
container.AddTail(*pElmt);
delete pElmt;

嗯,试了下你那样是能够的,不过下面的代码为什么一旦运路程序就溃散了呢?
OnButtonClick()
{
    Element elmt;
    container.AddTail(elmt);
}

我知道函数前往后elmt的占内存就失效了,“加的是对象”不是应该相当于把elmt数据拷贝一份进入container吗?如何不是这样的,那么加入*pElmt之后又将pElmt指向的内存释放,那以后从container访问的时候不就犯错了么?
自己照旧理解不透啊!
---华软网友回复---
晕,问题没发完整,再发一遍//////////////////////
在一个线程的函数中产生对象,然后将这些对象保存到全局的容器中,再另一个线程中掏出来措置惩罚 然后自在器中去除。 产生对象时必需用new来非配空间吗?如果是这样,措置惩罚事后怎么delete呢?伪代码以下
struct Element  //基本数据类型
{
.....
}

typedef CList<Element ,Element>  Container;
Container container;


//产生对象的函数
fun()
{
Element  *pElmt=new Element;
container.AddTail(*pElmt);
}
//措置惩罚进程

while(!container.IsEmpty())
{
Element  e=container.GetHead();

{
//对 e do something
}

container.RemoveHead();
}


我大致就是那样写的,这样做会有内存泄漏的吧?应该怎么改善呢?改的欠好程序就直接溃散了啊,
新手坐等帮助。。。。。
PS:我想要的容器是行列,以前基本没用过容器的,不想用STL ,有更合适的措施吗?
---华软网友回复---
不用时要把Element掏出来delete掉 然后整个容器再removeall      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。