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 回答