您可以尝试几件事 - 尝试运行 Sysinternals ProcessMonitor 工具(Process Monitor v3.2)并正确配置符号路径和源代码路径(假设您在 Windows 平台上运行)。日志很可能会告诉您导致泄漏的行号和来源。您需要知道如何使用进程监视器并浏览日志。
否则,您也可以尝试使用以下 CRT API 来跟踪内存分配/释放并吐出内存泄漏转储以供进一步调查。以下代码仅在调试模式下有效。
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#ifdef _DEBUG
#ifndef DBG_NEW
#define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )
#define new DBG_NEW
#endif
#endif // _DEBUG
_CrtMemState crtMemStateStart;
_CrtMemState crtMemStateFinish;
_CrtMemCheckpoint(&crtMemStateStart);
// Your suspisious code
_CrtMemCheckpoint(&crtMemStateFinish);
int nDifference(0);
_CrtMemState crtMemStateDifference;
nDifference = _CrtMemDifference(&crtMemStateDifference, &crtMemStateStart, &crtMemStateFinish);
if(nDifference > 0)
_CrtDumpMemoryLeaks();
有关更多信息,请参阅此链接:使用 CRT 库查找内存泄漏
请记住,内存泄漏可能很难找到,尤其是在涉及 COM 代码的情况下。但是拥有正确的知识和工具肯定会让生活变得更轻松。