4

私は簡単なコードを持っています:

#include <QApplication>

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

pro ファイルを使用して Qt Creator でコンパイルします。

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = testLeaks
TEMPLATE = app


SOURCES += main.cpp

HEADERS  +=

FORMS    +=

コマンドvalgrind ./testLeaksはリークについて言い、次を出力します。

==31276== HEAP SUMMARY:
==31276==     in use at exit: 1,190,544 bytes in 7,267 blocks
==31276==   total heap usage: 46,096 allocs, 38,829 frees, 6,716,079 bytes allocated
==31276== 
==31276== LEAK SUMMARY:
==31276==    definitely lost: 2,788 bytes in 11 blocks
==31276==    indirectly lost: 7,065 bytes in 182 blocks
==31276==      possibly lost: 318,238 bytes in 1,233 blocks
==31276==    still reachable: 862,453 bytes in 5,841 blocks
==31276==         suppressed: 0 bytes in 0 blocks

QApplication にコメントすると、リークはありません。このクラスでリークが発生するのはなぜですか?

4

1 に答える 1

1

コメントに記載されているように、次のコマンドは詳細情報を提供します。

valgrind --leak-check=full --show-leak-kinds=all -v ./testLeaks

また、短い出力の最後を切り取ります。

==3005== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2).

いずれにせよ、それは QApplication 自体のバグではなく、根本的な依存関係である可能性が非常に高いです。特に、libc更新後に発生するとおっしゃいました。

libcおよび他の低レベル ライブラリで、メモリ リークがないと思われる問題がいくつかありましたが、最終的には驚きました。

これは、そのライブラリを使用して例を書くことで簡単に確認できます。

ただし、それは約 320K+ であり、Qt アプリケーション (特に GUI) にはさらに多くの量が必要になるため、これを無視できない量とは見なしません。

于 2014-01-11T07:41:08.690 に答える