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      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。