• 5026阅读
  • 7回复

关于qtC++程序中的内存泄漏的处理求助! [复制链接]

上一主题 下一主题
离线ldqiang
 
只看楼主 倒序阅读 楼主  发表于: 2008-04-21
— 本帖被 XChinux 执行加亮操作(2008-04-21) —
我在写程序代码完成后,发现了程序中出现了内存泄漏,请看下面:
定义一个结构体
struct  STpeople
{
          char      name[30];  //姓名
          int          age;   //年龄
          char      address[]100;    //地址
}

请看下面函数调用,仅演示,功能暂汪考虑,大家分析一下,如何解决内存泄漏

struct  STpeople  *pManyPeople = new STpeople[100];
if(条件)                                  //实现条件1
return false;

if(条件)                                  //实现条件2
return false;

if(条件)                                  //实现条件3
return false;

if(条件)                                  //实现条件4
return false;

if(条件)                                  //实现条件5
return false;

delete pManyPeople;      //释放内存
return true;



上述代码肯定是存在内存泄漏的,中间有很多return,

经过我找了一些资料后,发现了可以这样实现,但效果不佳,感觉很不简洁,可读性不好,如下:

bool    isOk  = false; //记录每一次调用返回情况
struct  STpeople  *pManyPeople = new STpeople[100];
if(条件)                                              //实现条件1
{

      if(条件)                                              //实现条件2
        {
                if(条件)                                          //实现条件3     
                        {
                                  if(条件)                                       //实现条件4
                                          {

                                                    if(条件)                                 //实现条件5
                                                            {
                                                                      isOk = true;
                                                            }
                                            }
                            }
                }
}

delete pManyPeople;      //释放内存
return isOk;      //返回调用是否成功标记

在此,我想请大家帮忙想一下,可以如何实现,我是在Qt下的C++类,注意不是QObject下来的,所以不能调用QPointer智能指针,也想过以下方法:
  1 、调用STL的智能指针auto_prt和tr1_shared_ptr,但这两个好像不支持分配一个数据内存,不知说得对没有?
  2、因为我的数据结构体每次分配内存都是固定的,所以想用让结构体自己分配内存,不如如何实现,谢谢?
  3、采用内存池进行管理,请大家讨论一下,谢谢!
离线ldqiang
只看该作者 1楼 发表于: 2008-04-21
哦,打的时候少了点东西,要把

delete pManyPeople;      //释放内存

改成

delete [ ]  pManyPeople;      //释放内存
离线jssx
只看该作者 2楼 发表于: 2008-04-22
可以用用goto 失败的时候转到那里进行集中处理
离线傻猫
只看该作者 3楼 发表于: 2008-04-22
1,栈中开辟vector
2 struct  STpeople  *pManyPeople = new STpeople[100];
if(条件)                                  //实现条件1
return false;

if(条件)                                  //实现条件2
return false;

if(条件)                                  //实现条件3
return false;

if(条件)                                  //实现条件4
return false;

if(条件)                                  //实现条件5
return false;

delete pManyPeople;      //释放内存
return true;
定义个bool x=1;
return false改成x= 0,break;
delete []pManyPeople; 
return x

3,and so on
-------------------------------
不常在
有事短消息或者到我blog讨论http://hi.baidu.com/ning_cat
已经没用qt作开发了。。。:-(
离线ldqiang
只看该作者 4楼 发表于: 2008-04-23
最后考虑了一下,还是直接用goto语句处理!谢谢大家的意见!
离线wangowen

只看该作者 5楼 发表于: 2008-04-23
goto?禁止!
离线kkerosene
只看该作者 6楼 发表于: 2008-04-23
晕!
离线douboer

只看该作者 7楼 发表于: 2008-04-27
qt(c++)中最好不要用goto语句。
-------------------------------------
http://logins.bokee.com
-------------------------------------
快速回复
限100 字节
 
上一个 下一个