У меня есть простой код:
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
return 0;
}
Я компилирую его в Qt Creator, используя pro-файл:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = testLeaks
TEMPLATE = appSOURCES += 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, нет никаких утечек. Почему этот класс дает утечки?
Как отмечено в комментариях, следующая команда предоставляет дополнительную информацию:
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) потребуют намного больше, я бы не стал рассматривать это как ничтожную сумму.
Других решений пока нет …