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

Ste*_*ing 15 c++ qt memory-leaks

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

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

    #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();
    }
Run Code Online (Sandbox Code Playgroud)

仪器图

呼叫树

泄漏的物体

我稍微修改了一下代码,看看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();
    }
Run Code Online (Sandbox Code Playgroud)

呼叫树 泄漏的物体

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

小智 2

内存确实被泄漏,这是可信框架永远不应该做的事情。

基本上,框架应该使用智能指针,或者应该“手动”跟踪和处理有问题的内存泄漏。

如果没有泄漏,那么所有内存在使用后都会返回到堆中。

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