MSVS 2010 C:内存检测按预期工作

时间:2012-05-30 23:47:09

标签: c visual-studio memory-leaks

我正在开发MSVS 2010中的C项目(意思是我使用的是malloc,calloc和free,而不是C ++ new和delete运算符)。我需要找到一个内存泄漏(s?),所以我按照http://msdn.microsoft.com/en-us/library/x98tx3cf.aspx上的步骤让程序在运行结束时转储内存状态。

我包括这样的库:

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

我还指定每个出口都应显示调试信息,如下所示:

_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

但我的调试输出如下:

Detected memory leaks!
Dumping objects ->
{80181} normal block at 0x016B1D38, 12 bytes long.
 Data: <  7   7 8 7 > 0C D5 37 00 14 A9 37 00 38 99 37 00 
{80168} normal block at 0x016ACC20, 16 bytes long.
 Data: <  7 H 7 X 7 \ 7 > A8 FB 37 00 48 E9 37 00 58 C2 37 00 5C AC 37 00 
...

根据文章,我应该获取文件名和行号输出,指示泄漏内存的分配位置。为什么这不会发生,我该如何解决?

1 个答案:

答案 0 :(得分:0)

Adrian McCarthy评论说我应该确保每个编译单元中都存在_CRT_MAP_ALLOC定义。虽然我无法弄清楚如何将其定义为编译器选项,但我确实创建了一个稀疏头文件,我确保包含每个编译文件。这使调试功能按预期工作。