2014-01-26 70 views
1

很久以前,我聽到有人在應用程序開始時添加了一些聲明,並告知應用程序是否有未回憶的內存。Windows開發:如何確定我的應用程序是否在泄漏內存?

TIA

加成

這就是:與Visual Studio

http://msdn.microsoft.com/en-us/library/e5ewb1h3%28v=vs.80%29.aspx

+1

http://stackoverflow.com/questions/413477/is-there-a-good-valgrind-substitute-for-windows#413842 –

+1

有太多的方法來做到這一點,直接回答你的問題,特別是因爲那裏沒有詳細說明你實際上在做什麼*。一個不使用CRT的原生WINAPI應用程序會發現CRT調試堆服務非常沒用。使用WinDbg和全局/本地WIN32堆設施將是非常沒用的,如果你使用的是一個子分配庫(就像許多CRT使用)。您最好在本網站上尋找最適合您特定用途的答案。我可以全力保證其覆蓋的*某處*。 – WhozCraig

+2

最有可能這就是你的意思http://msdn.microsoft.com/en-us/library/x98tx3cf.aspx –

回答

1

調試C運行時庫可以跟蹤所有的分配和自動報告任何未釋放在應用程序退出。首先,包括<crtdbg.h>,然後在你的程序的開始,問它通過使該呼叫跟蹤分配和報告泄露:

_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); 

在Visual Studio調試器的調試輸出窗口(或其他程序監視調試輸出),當應用程序結束時,您會看到泄漏分配的報告。

通常,您可能只想在調試版本中執行此操作,因爲這會對性能產生不可忽視的影響。

另請注意,如果您分配單身人士並永遠不釋放他們,他們將(不奇怪)報告爲泄漏。

Full details在MSDN中。

相關問題