首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存泄漏检测

内存泄漏检测
EN

Stack Overflow用户
提问于 2010-09-23 23:25:33
回答 3查看 723关注 0票数 2

嘿,我正在尝试使用以下命令检测visual studio中的漏洞:

代码语言:javascript
复制
#define _CRTDBG_MAPALLOC
#include <stdlib.h>
#include <crtdbg.h>

在main的末尾,我输入:

代码语言:javascript
复制
_CrtDumpMemoryLeaks(); 

当我做这一切的时候,我得到了内存泄漏(里面有什么),但没有分配的地方,你能帮我用命令显示分配的位置吗,提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-23 23:34:23

你不能开箱即用。CrtDumpMemoryLeaks只会告诉您是否有内存泄漏,而不是内存泄漏的位置。CRT没有提供这样的设施。

有几种方法可以完成这样的事情。一种方法是使用Valgrind这样的工具,它检测整个应用程序并在虚拟机中运行应用程序。Valgrind严重减慢了应用程序的速度,但使这种分析成为可能。CRT没有在虚拟机中运行东西的奢侈,所以它不能真正提供这样的信息。

另一种方法是使用更智能的调试器,这些调试器能够理解堆分配路径并为您跟踪每个分配,就像Aaron Klotz's documents in his answer一样。

哦,还有一件事--如果您在C++中正确使用内存,就不应该担心内存泄漏,因为您不应该手动delete内存。请考虑使用各种智能指针类型包装对new的任何调用。

票数 0
EN

Stack Overflow用户

发布于 2010-09-23 23:57:27

为什么不使用微软提供的免费Debugging Tools For Windows包中的UMDH实用程序呢?如果您正确设置了调试符号,它将为您提供分配的实际调用堆栈。

注意:如果使用COM和BSTR,请确保将OANOCACHE环境变量设置为1。如果不这样做,OLEAUT32.DLL将缓存BSTR分配,并且它们将在您的UMDH输出中显示为假阳性。

票数 3
EN

Stack Overflow用户

发布于 2012-07-14 03:28:07

您应该使用_CRTDBG_MAP_ALLOC而不是_CRTDBG_MAPALLOC。问题是在MSDN页面上,他们有一个打字错误,他们谈到了两个标志,但只有第一个是好的。如果你想查看crt/crtdbg.h,你会发现它只使用了_CRTDBG_MAP_ALLOC。

有拼写错误的MSDN页面是:http://msdn.microsoft.com/en-us/library/e5ewb1h3%28v=VS.80%29.aspx

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3779912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档