C/C++中基于Crt的内存泄露检测

C语言中的内存检测宏。调试malloc

glib提供了一些检测malloc内存泄漏的函数例如:

1. mtrace(), muntrace() 并与MALLOC_TRACE环境变量进行配合,该环境变量定义了跟踪信息将要写入的文件名称。

使用mtrace()函数首先会检查是否定义了写入信息的文件位置。若已经正确设置了MALLOC_TRACE中的文件位置,则后续所有调用malloc函数是信息会被记录到改文件中。

但由于mtrace()所产生的文件可读性极差,还需要使用一个叫mtrace的工具来分析所产生的文件

 

2. mcheck() 与mprobe()函数,他们允许程序来检测所分配的内存块。 使用该函数需要连接mcheck库,加上在编译时加上 -lmcheck编译选项。

 

3. MALLOC_CHECK_ 环境变量提供了跟mcheck与mprobe函数类似的功能,但是他不需要重新编译与连接程序。

设置为0:忽略错误。 1:打印诊断信息。 2:调用abort()来终止程序

参考以下blog:

https://www.cnblogs.com/arnoldlu/p/10827884.html

 

还有一些其他的调试用的库例如:

Electric Fence(http://www.perens.com/FreeSoftware/)

dmalloc(http://dmalloc.com/)

Valgrind(http://valgrind.org)

Insure++(http://www.parasoft.com/)

 

---------------------------------

C++中使用的内存检测宏(Windows下)

尽管这个概念已经让人说滥了 ,还是想简单记录一下, 以备以后查询。

运行一下代码

 

#ifdef _DEBUG
#define DEBUG_CLIENTBLOCK   new( _CLIENT_BLOCK, __FILE__, __LINE__)
#else
#define DEBUG_CLIENTBLOCK
#endif

#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>


#ifdef _DEBUG
#define new DEBUG_CLIENTBLOCK
#endif


int main(int argc, char* argv[])
{
	char* p = new char();
	char* pp = new char[10];
	char* ppp = (char*)malloc(10);

	_CrtDumpMemoryLeaks();

	return 0;
}

运行以后控制台会显示一下信息,会检测出内存泄漏

 

 

Detected memory leaks!
Dumping objects ->
c:\users\leonjo\documents\visual studio 2015\projects\consoleapplication1\
consoleapplication1\consoleapplication1.cpp(20) : {67} normal block at 0x00590C88, 10 bytes long.
 Data: <          > CD CD CD CD CD CD CD CD CD CD 
c:\users\leonjo\documents\visual studio 2015\projects\consoleapplication1\
consoleapplication1\consoleapplication1.cpp(19) : {66} client block at 0x00590C50, subtype 0, 10 bytes long.
 Data: <          > CD CD CD CD CD CD CD CD CD CD 
c:\users\leonjo\documents\visual studio 2015\projects\consoleapplication1\
consoleapplication1\consoleapplication1.cpp(18) : {65} client block at 0x0058E8A0, subtype 0, 1 bytes long.
 Data: < > 00 
Object dump complete.
The program '[3068] ConsoleApplication1.exe' has exited with 
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值