2014-01-26 36 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中。

相关问题