我有一个简单的代码:
#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,则没有泄漏。为什么这个课会泄漏?
答案 0 :(得分: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)需要更多,我不会认为这是一个不可忽略的数量。