Windows 上的 C++ : function to get allocated memory?

标签 c++ windows memory-leaks

我使用 C++ 编写代码,在 Windows 7 上使用 Visual Studio 2008。

我的应用程序有内存泄漏,我可以通过系统监视器看到它。

我需要在代码中发现它。

是否存在返回分配给调用进程的内存量的函数?

最佳答案

有一个 MSVC 特定的 memleak 检测解决方案

// 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 );
}

这个令人毛骨悚然的代码启用了所有未分配 block 的文件协议(protocol)。当然和MSVCRT的debug版本有很深的联系

关于Windows 上的 C++ : function to get allocated memory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10677124/

相关文章:

c++ - GetThreadContext 返回错误 6,句柄无效?

c++ - 如何使用 C++ 在 Active Directory 的属性中设置值?

javascript - 我可以从开发工具中获取 GC 的内存吗?

c++ - 将 vector 传递给函数并返回 vector 并重铸

c++ - 将字符串转换为二维数组

c++ - VSCode 不对库路径使用 compile_commands.json

java - 如何修复 Tomcat 服务器中的错误内存泄漏

c++ - Listview 中的第一次机会异常设置检查状态

Android Studio 卡在 "Downloading Components"

Python解析XML后不释放内存