MFC程序(VS2010)检测内存泄露关于信息输出内容补充说明

不少网友写了关于MFC内存检测机制的使用方法,如下面几篇文章写得很好,参考下面几篇文章:

内存管理:_CrtDumpMemoryLeaks和_CrtSetBreakAlloc
MFC内存泄露检测 
VC使用CRT调试功能来检测内存泄漏
检测C++的内存泄漏(win7 64 vs2010)

不过有一个问题很多网友都没有提到,那就是关于内存泄露的信息输出的内容是否包含.cpp文件名路径问题.

    利用_CrtDumpMemoryLeaks()可以输出内存泄露信息,在程序文件d:\svn\trunk\code\test\testbase.cpp中某函数有这么一行:

	char* xx = new char[10];
	strcpy(xx, "123456789");

然后在程序调用该函数,在程序结束前调用_CrtDumpMemoryLeaks();输出信息如下:

Detected memory leaks!
Dumping objects ->
{671} normal block at 0x00992FE8, 10 bytes long.
 Data: <123456789 > 31 32 33 34 35 36 37 38 39 00 

  请注意这个输出信息,并没有指出是哪个源程序文件的哪一行发生泄露,MSDN上说应用程序定义_CRTDBG_MAP_ALLOC宏就可以输出该信息,我在文件testbase.cpp定义了该宏,如下所示:

#ifdef _DEBUG
#define _CRTDBG_MAP_ALLOC
#include<stdlib.h>
#include<crtdbg.h>
#endif

但事实证明并不是这样,我发现输出的内容仍然没有"d:\svn\trunk\code\test\testbase.cpp".

    后来经过测试发现,testbase.cpp必须有这样的定义:

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

然后在程序结束前调用_CrtDumpMemoryLeaks();输出信息如下:

Dumping objects ->
d:\svn\trunk\code\test\testbase.cpp(146) : {671} normal block at 0x00CD2FE8, 10 bytes long.
 Data: <123456789 > 31 32 33 34 35 36 37 38 39 00 

结果是正确的,输出的内容指出了是哪个源程序文件的哪一行发生泄露.

可是这有产生另外一个问题,那就是_CRTDBG_MAP_ALLOC似乎没有起任何作用,不知道为什么.如果哪位网友知道这个原因,请不吝赐教,不胜感激.



转载于:https://www.cnblogs.com/jetyi/archive/2012/09/15/2686905.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值