• 5340阅读
  • 8回复

[提问]为什么这个程序,存在内存泄露? [复制链接]

上一主题 下一主题
离线tthheedhz
 
只看楼主 倒序阅读 楼主  发表于: 2012-05-21
为什么for循环里的局部变量的内存,没有被销毁?

CONFIG+= qaxcontainer

#include <QtGui>
#include <QAxObject>

int main(int argc,char*argv[])
{
    QApplication app(argc,argv);

    for(int j=0;j<1;j++)
    {
        QAxObject word("Word.Application");
        word.setProperty("Visible", false);
        word.dynamicCall("quit()");
    }
    return app.exec();
}

按道理,上面的程序占用的内存,和下面占用的内存,应该是一样的。

CONFIG+= qaxcontainer

#include <QtGui>
#include <QAxObject>

int main(int argc,char*argv[])
{
    QApplication app(argc,argv);


    return app.exec();
}

但结果,上面的程序,却是存在1Mb的内存泄露。为什么?







离线roywillow

只看该作者 1楼 发表于: 2012-05-21
话说dynamicCall后的c串大小写不区分没问题吗?
另外我觉得就算Quit成功了,那个word变量并没有被完全析构啊……
另外参考一下clear()函数?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线tthheedhz
只看该作者 2楼 发表于: 2012-05-22
引用第1楼roywillow于2012-05-21 18:37发表的  :
话说dynamicCall后的c串大小写不区分没问题吗?
另外我觉得就算Quit成功了,那个word变量并没有被完全析构啊……
另外参考一下clear()函数?

我加了clear函数,结果还是一样。

按道理,for循环里面的东西,是应该被销毁的吧?

但却有1mb的内存,没有被销毁。
离线tthheedhz
只看该作者 3楼 发表于: 2012-05-22
引用第1楼roywillow于2012-05-21 18:37发表的  :
话说dynamicCall后的c串大小写不区分没问题吗?
另外我觉得就算Quit成功了,那个word变量并没有被完全析构啊……
另外参考一下clear()函数?

这个quit或者Quit,大写小写都正确。

无论大写还是小写,for循环里的1MB内存,还是没有被销毁。

离线tthheedhz
只看该作者 4楼 发表于: 2012-05-22
我用debug调试过,for循环退出后,word变量已经被销毁了。

但是,程序还是多出了1MB的内存,没有被销毁。不知道这1MB的内存,是哪里来的?
离线tthheedhz
只看该作者 5楼 发表于: 2012-05-23
引用第1楼roywillow于2012-05-21 18:37发表的  :
话说dynamicCall后的c串大小写不区分没问题吗?
另外我觉得就算Quit成功了,那个word变量并没有被完全析构啊……
另外参考一下clear()函数?

但是,word是在for循环里的,for循环结束后,word是应该被析构的。

我debug过,也的确是被析构了。


离线tthheedhz
只看该作者 6楼 发表于: 2012-05-23
这里提及了,QT解决了ActiveQt的一个memory leak的bug。

http://www.qtcn.org/bbs/read.php?tid=1443

离线tthheedhz
只看该作者 7楼 发表于: 2012-05-23
引用第6楼tthheedhz于2012-05-23 09:35发表的  :
这里提及了,QT解决了ActiveQt的一个memory leak的bug。
http://www.qtcn.org/bbs/read.php?tid=1443


这里好象是解决办法,谁能帮忙看看具体该如何做?

https://bugreports.qt-project.org/browse/QTBUG-17831
离线tthheedhz
只看该作者 8楼 发表于: 2012-05-23
引用第1楼roywillow于2012-05-21 18:37发表的  :
话说dynamicCall后的c串大小写不区分没问题吗?
另外我觉得就算Quit成功了,那个word变量并没有被完全析构啊……
另外参考一下clear()函数?

这里好象是解决办法,能否帮忙看看具体该如何做?好象是改了以下QT的源代码。

https://bugreports.qt-project.org/browse/QTBUG-17831
快速回复
限100 字节
 
上一个 下一个