hur.cn - 华软网

 热门搜索

内存泄漏

  作者:未知    来源:网络    更新时间:2011/6/14
问个很初级的问题:

我在成员函数中
C++">void CMainFrame::
{// 导入INI文件
         //...
for (long i = 0; i < nTotal; i++)
{
sprintf(strSrvName,"服务器%d", i+1);
strTemp = Inifile.ReadString("SERVERLIST",strSrvName,"");
if(strTemp.Length()<=0)
continue;

CMyClass * pMyClass= new CMyClass;  //自定义的一个类
if(pMyClass == NULL)
continue;

                  //....
                  //处理相应的数据
                  //....
m_ServerInfoQueue.push(&pPack); //加入队列
}
}


我在那个for里面new出来的对象,应该什么时候删掉呢?
---华软 网友回答---
 m_ServerInfoQueue 用完后再释放
---华软网友回复---
照你程序写的来看,必须是这个函数结束之前。
---华软网友回复---
做个2次封装  
增加一个RELEASE函数 DELETE THIS;

在2次封装的函数析构里调用 RELEASE

PUSHBACK 增加2次封装类的对象 不用指针了
---华软网友回复---
VECTOR 声明周期到了  自然就DELETE了
---华软网友回复---
C++">CMyClass * pMyClass= new CMyClass;  //自定义的一个类

貌似你的这个pMyClass没有释放啊。并且new不成功会抛出badalloc异常,
C++">if(pMyClass == NULL)

在new真的失败时候,是执行不到它的。
---华软网友回复---
for循环里就应该释放,这么写程序有点危险
---华软网友回复---
引用 6 楼 swandream 的回复:
for循环里就应该释放,这么写程序有点危险


不能在for循环中释放,我现在的做法是在程序析构的时候把队列的节点一个一个取出来再delete.因为m_ServerInfoQueue是一个成员队列,在程序的其他地方也会用到

如果在FOR里释放,那么别的地方来取这个队列的结点值的时候,会不会就成了野值 ?
---华软网友回复---
肯定在函数退出前要释放的。
---华软网友回复---
在函数推出前释放掉
---华软网友回复---
什么时候都可以,
先把指针记录一下,然后需要删除的时候,循环删
---华软网友回复---
不用它的时候就delete删除掉~      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。