2009-06-17 18 views
1

我正在Windows上使用Visual Studio 2008構建Qt 4.5應用程序。每當我以調試模式運行我的應用程序並關閉它時,Visual Studio會打印跟在輸出窗格之後:在關閉Qt 4.5應用程序時,Visual Studio報告已檢測到內存泄漏

檢測到內存泄漏!
傾銷對象 - >
{696512}位於0x01981AB0的常規塊,長度爲24個字節。
數據:<> 00 CD CD CD 00 00 00 00 00 00 00 00 00 00 00 00
{696511}在0x02E59B70處的正常塊,12個字節長。
數據:< U2g U2g> B0 1A 98 01 E8 55 32 67 E8 55 32 67

而輸出報告幾百個這樣的塊。在使用Qt 4的Model/View框架時,我特別注意到了這一點。 Qt實際上是否存在內存泄漏,或者是否存在Visual Studio錯誤報告泄漏的情況?

+6

您的代碼有可能存在內存泄漏...... – sth 2009-06-17 17:38:26

+0

您是否釋放了所有已分配的資源,或者您是否讓流程退出(在這種情況下泄漏是由設計決定的 - 通常是出於性能原因)? – 2009-06-17 17:45:05

回答

2

我有機會s。利用DevPartner剖析我的項目。令人驚訝的是,它報告了QtGuid4.dll和QtCored4.dll中的內存泄漏;然而,在手動查看每個案例後,我發現它們都是誤報。

作爲一個附註,在使用Qt的代碼中沒有報告內存泄漏。

1

確保您以Qt方式使用動態內存,例如

#include <QObject> 
#include <QString> 

class MyClass : public QObject 
{ 
public: 
MyClass (const QString& text, QObject *parent = 0); 
... 
}; 


int main() 
{ 
QObject parent; 
MyClass *a; 
a = new MyClass ("foo", &parent); 
... 
} 

(c)中的Johan特林,

4

內存泄漏信息 「QT開發的基礎」 被調試窗口運行時提供的。你的程序可以進行交互和配置。

大括號{696512}中的數字是分配訂單號。如果此號碼始終相同,則可以通過將號碼傳遞到_CrtSetBreakAlloc來設置此分配的中斷點。再次在調試器中運行程序,調試器將在分配泄漏內存時停止。

在main的早期調用此函數。如果數字不總是相同,請嘗試使用簡化代碼重現內存泄漏,直到它始終保持不變。

欲瞭解更多信息,請參閱Memory Leak Detection Enabling

0

我認爲這發生在內存泄漏檢測器在QT清理之前檢查泄漏。我通過將我的qtmaind.lib,QtCored4.lib,QtGuid4.lib,QtOpenGLd4.lib等移到VS的項目設置對話框中鏈接器依賴關係框的底部,解決了這個問題。