• 11234阅读
  • 15回复

[讨论]一个内存释放问题,百思不得其解,请教各位 [复制链接]

上一主题 下一主题
离线leepanybyq
 
只看楼主 正序阅读 楼主  发表于: 2011-02-17
classmyDialog: publicQDialog
{
public:
    myDialog();
    
~myDialog();
private:
    QDirModel
*m_pDirModel;
};
myDialog::myDialog()
{
    ui.setupUi(
this);
    m_pDirModel  
=newQDirModel( this);
    ui.m_pTree
->setModel( m_pDirModel );//ui是对话框资源,m_pTree是一个QTreeView}
myDialog::
~myDialog()
{
    
if(m_pDirModel)
        delete m_pDirModel;
}

我想我的代码没什么问题吧,可是每次打开对话框,然后关闭,内存就会比打开前多一点,不断打开关闭,内存会不断上升,不知道哪儿泄漏了,请各位赐教!
[ 此帖被leepanybyq在2011-02-17 15:03重新编辑 ]
离线ninsun

只看该作者 15楼 发表于: 2011-11-30
似乎...delete以后内存不会立刻被释放...
我已经遇到很多这种状况了.
过一段时间就恢复了.
要想测试,就写个循环,不停创建,关闭,创建关闭,一段时间以后看看内存到底还增长不增长了.
(曾经我遇到过最小化后内存占用变少,恢复窗口了内存占用变多的状况... Qt自己管理了好多额外内存呢...)
离线qijialin
只看该作者 14楼 发表于: 2011-11-30
是不要应该先清空model中绑定的那些节点啊,也就是显示在QTreeView中的那些节点
离线leepanybyq
只看该作者 13楼 发表于: 2011-02-18
写了个测试程序
QDirModel *p = NULL;
for (int i = 0; i<100; i++)
{
  p = new QDirModel();
  delete p;
}
执行完这段后,内存一点也没有释放
这是为什么呢?
离线leepanybyq
只看该作者 12楼 发表于: 2011-02-18
还有哪位能给点提示啊
离线leepanybyq
只看该作者 11楼 发表于: 2011-02-17
引用第10楼jdwx于2011-02-17 20:00发表的 :
改一下:if(m_pDirModel!=null)         delete m_pDirModel;
或者在这里加一个断点:delete m_pDirModel; 检查一下这句是否被执行。
还有看看任务管理器你的程序退出了没有?

恩,delete确实执行了。
离线jdwx

只看该作者 10楼 发表于: 2011-02-17
改一下:if(m_pDirModel!=null)         delete m_pDirModel;
或者在这里加一个断点:delete m_pDirModel; 检查一下这句是否被执行。
还有看看任务管理器你的程序退出了没有?
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线leepanybyq
只看该作者 9楼 发表于: 2011-02-17
引用第8楼roywillow于2011-02-17 17:31发表的 :
不过那个model既然已经提供了parent了,Qt应该会自动处理掉的吧

对,不管我在析构函数中是不是delete它,问题依然存在
离线roywillow

只看该作者 8楼 发表于: 2011-02-17
不过那个model既然已经提供了parent了,Qt应该会自动处理掉的吧
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线leepanybyq
只看该作者 7楼 发表于: 2011-02-17
引用第4楼sbtree于2011-02-17 16:53发表的 :
Qt的窗口默认情况下是在关闭的时候隐藏起来了,实际上没有删除,除非你设置了Qt::WA_DeleteOnClose或者显式delete。

恩,是隐藏起来了,但下次再显示就会又申请新的内存吗?那岂不是多打开几次内存要被耗尽了?
离线leepanybyq
只看该作者 6楼 发表于: 2011-02-17
如果m_pDirModel  =newQDirModel( this); 不new这个QDirModel将不会有任何问题,
但现在我new了这个QDirModel,而且在析构的时候delete了,就会出现泄漏
离线leepanybyq
只看该作者 5楼 发表于: 2011-02-17
回 3楼(6a209) 的帖子
呵呵,绝不是这么简单的问题
离线sbtree
只看该作者 4楼 发表于: 2011-02-17
Qt的窗口默认情况下是在关闭的时候隐藏起来了,实际上没有删除,除非你设置了Qt::WA_DeleteOnClose或者显式delete。
[ 此帖被sbtree在2011-02-17 16:54重新编辑 ]
windows 7 + VC++2008 + Qt4.5.2
离线6a209
只看该作者 3楼 发表于: 2011-02-17
你new 这个dialog的时候 del掉了么~
离线leepanybyq
只看该作者 2楼 发表于: 2011-02-17
回 1楼(roywillow) 的帖子
不是new的 局部变量栈内存
离线roywillow

只看该作者 1楼 发表于: 2011-02-17
想知道是怎么打开的
如果每次打开都是new一个dialog然后显示……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
快速回复
限100 字节
 
上一个 下一个