仪器一直告诉我,我有内存泄漏

时间:2013-04-24 14:18:57

标签: c++ qt memory-leaks

我是mac和乐器的新手,我用它来测试我的Qt应用程序,我发现了很多泄漏的对象,几乎所有这些都来自Qt lib。我检查我的代码非常小心,但可以'找到问题。为了避免内存泄漏的问题,我严格遵守RAII的规则,总是让类处理资源,确保每个小部件都有父级,没有父级(意图)的小部件将通过智能指针或Qt :: WA_DeleteOnClose保护。 / p>

要修复内存泄漏警告,我会编写一个非常简单的Qt应用程序并将其用作测试, 仪器总是表明我有一些内存泄漏(如图)甚至是最简单的 我创建的Qt app。

    #include <QApplication>
    #include <QLabel>

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


        QLabel w;
        w.resize(320, 240);
        w.show();

        return a.exec();
    }

文书图表

Call tree

Leaked object

我稍微改变了一些代码,并且看到Instruments的内存泄漏显示会继续上升 或不。

#include <QApplication>
    #include <QLabel>

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


        for(size_t i = 0; i != 100; ++i){
        QLabel w;
        w.resize(320, 240);
        w.show();
       }
       QLabel w;
       w.resize(320, 240);
       w.show();

        return a.exec();
    }

Call tree Leaked object

内存泄漏确实增加,我强烈希望这是仪器的错误, 否则我必须回到Qt4(而且我不知道它会有同样的问题).I 不要以为这个简单的应用程序可以通过mac app store(OSX)的质量检查。 发生了什么?我该怎么解释这个现象?如果没有内存泄漏,我应该 没有看到泄漏对象的任何消息,我是否正确?Qt5.0.2的错误?

1 个答案:

答案 0 :(得分:2)

内存确实被泄露,可信框架永远不会泄露。

基本上,框架应该使用智能指针,或者应该追踪并“手动”处理违规内存泄漏。

如果没有泄漏,则使用后所有内存都将返回堆中。

根据bugreports.qt-project.org/browse/QTBUG-7505,此错误发布在4.6.0版本中。