15

私は Mac と計測器を初めて使用します。それを使用して Qt アプリをテストします。多くのリークされたオブジェクトを見つけました。ほとんどすべてが Qt lib からのものです。コードを非常に注意深くチェックしますが、問題を見つけることができません。メモリ リークの問題を回避するために、私は 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();
    }

楽器のグラフ

コール ツリー

漏れた物体

コードを少し変更すると、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();
    }

コール ツリー 漏れた物体

メモリ リークが増加します。これが計測器の間違いであることを強く願っています。それ以外の場合は、Qt4 に戻る必要があります (同じ問題が発生するかどうかはわかりません)。これは単純なことではないと思います。アプリは、Mac App Store (OSX) の品質チェックに合格することができました。何が起こっているのですか?この現象をどう説明すればいいですか?メモリリークがなければ、リークオブジェクトのメッセージは表示されないはずですが、正しいですか?Qt5.0.2のバグですか?

4

1 に答える 1

2

確かにメモリがリークされていますが、これは信頼できるフレームワークでは決して行うべきではありません。

基本的に、フレームワークはスマート ポインターを使用するか、問題のあるメモリ リークを追跡して「手動で」処理する必要があります。

リークがなければ、使用後にすべてのメモリがヒープに返されます。

bugreports.qt-project.org/browse/QTBUG-7505によると、このバグはバージョン 4.6.0 にあります。

于 2013-05-18T23:22:11.743 に答える