运行程序时出现此问题:
因此,当内存消耗变高时,我的程序驱动的硬件(电机)反应非常缓慢。
我很困惑。这是内存泄漏吗?
我知道可能很难确定问题所在,但是有什么共同的逻辑我应该如何看待这个问题?还是任何常用的工具?就像检查进气泄漏/系统倾斜一样,汽车通常会从管道,质量空气流量传感器或O2传感器开始......
非常感谢!
答案 0 :(得分:2)
您可以尝试以下几种方法 - 假设您在Windows平台上运行,请尝试运行Sysinternals ProcessMonitor工具(Process Monitor v3.2)并正确配置符号路径和源代码路径。日志很可能会告诉您导致泄漏的行号和来源。您需要知道如何使用进程监视器并浏览日志。
否则,您还可以尝试使用以下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();
有关详细信息,请参阅此链接:Finding Memory Leaks Using the CRT Library
请记住,如果涉及到COM代码,内存泄漏可能有点棘手。但拥有正确的知识和工具肯定会让生活变得更轻松。
答案 1 :(得分:0)