2014-01-10 209 views
4

我有一個簡單的代碼:爲什麼QApplication會泄漏內存?

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 

如果

#include <QApplication> 

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

我使用Pro文件編譯Qt Creator中我評論QApplication,沒有泄漏。爲什麼這個班級泄漏?

+0

哪個Qt版本? – lpapp

+0

qt 5.2.0和qt創建者3.0.0 – user2717575

+0

同樣,在這裏,但我得到:== 3005 ==錯誤摘要:0錯誤從0上下文(壓制:2從2)。我想你跳過了那部分。順便說一句,我不認爲320KB +「可能」的損失是不好的,它甚至可能來自於某種潛在的依賴關係。我想這需要更徹底的反省,最好是用一些靜態分析器運行。 :)另外,最好使用'valgrind --leak-check = full --show-leak-kinds = all -v。/ testLeaks' – lpapp

回答

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)將需要更多,我不認爲這是一個不可忽視的數額。

+0

錯誤摘要:來自5個上下文的5個錯誤(被抑制:0從0) – user2717575