我正在Windows 7上使用Visual Studio 2008在C++中进行编码。
我的应用程序存在内存泄漏,我可以在系统监视器上看到它。
我需要在代码中发现它。
它是否存在返回分配给调用进程的内存量的函数?
最佳答案
有针对MSMS的内存泄漏检测解决方案
// enable memory leaks detection
#if !defined(NDEBUG)
HANDLE hLogFile = CreateFile( "log.txt", GENERIC_WRITE, FILE_SHARE_WRITE,
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
#endif
_CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE | _CRTDBG_MODE_WNDW | _CRTDBG_MODE_DEBUG );
_CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG );
_CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_FILE | _CRTDBG_MODE_WNDW | _CRTDBG_MODE_DEBUG );
_CrtSetReportFile( _CRT_ASSERT, hLogFile );
_CrtSetReportFile( _CRT_WARN, hLogFile );
_CrtSetReportFile( _CRT_ERROR, hLogFile );
int tmpDbgFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );
tmpDbgFlag |= _CRTDBG_ALLOC_MEM_DF;
tmpDbgFlag |= _CRTDBG_DELAY_FREE_MEM_DF;
tmpDbgFlag |= _CRTDBG_LEAK_CHECK_DF;
_CrtSetDbgFlag( tmpDbgFlag );
if ( BlockIndex > 0 )
{
_CrtSetBreakAlloc( BlockIndex );
}
这个令人毛骨悚然的代码启用了所有未分配块的文件协议(protocol)。当然,它与MSVCRT的调试版本紧密相关