memwatch介绍

一、简介

memwatch可以跟踪程序中的内存泄漏和错误,能检测双重释放double-free)、错误释放erroneous free)、没有释放的内存unfreed memory)、溢出Overflow)、下溢Underflow)等。

下载地址:

http://www.linkdata.se/sourcecode/memwatch/

解压后,得到源码 memwatch.c 和 memwatch.h

二、安装及使用

memwatch根本是不需要安装的,因为它只是一组C程序代码。需要做的是:

1、在代码中加入 memwatch.c 和 memwatch.h,一起编译、链接

2、编译时定义宏 DMEMWATCH、DMW_STDIO,即在编译程序时加上选项-DMEMWATCH -DMW_STDIO

三、例子

int mainint argc,char **argv)

{

int i = 0;

char *p;

mwInit);   //执行memwatch的初始化工作。虽然memwatch有在第一次使用时能够自动装载,但作者还是建议我们使用该函数。

p = malloc100);

p = malloc200);

freep);

fori=0;i<5;i++)

{

p = malloc50);

ifp == NULL)

{

printf"can't malloc memory for test,num:%d\n",i);

continue;

}

ifi%2) == 0)

{

freep);

p = NULL;

}

}

mwTerm);   //执行memwatch的清除工作。当我们使用了mwInit)时,就必须使用该函数来终止memwatch的工作。

return 1;

}

 

运行程序,会在当前目录生产memwatch.log文件,内容如下:

============= MEMWATCH 2.71 Copyright C) 1992-1999 Johan Lindh =============

Started at Wed Mar  9 14:52:14 2016

Modes: __STDC__ 64-bit mwDWORD==unsigned long)

mwROUNDALLOC==8 sizeofmwData)==32 mwDataSize==32

Stopped at Wed Mar  9 14:52:14 2016

unfreed: <9> ../main.c26), 50 bytes at 0x855c3a0   {FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE …………….}

unfreed: <6> ../main.c26), 50 bytes at 0x855c268   {FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE …………….}

unfreed: <1> ../main.c20), 100 bytes at 0x855c1d0   {FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE …………….}

Memory usage statistics global):

N)umber of allocations made: 7

L)argest memory usage   : 300

T)otal of all alloc) calls: 550

U)nfreed bytes totals   : 200

参考进行修改代码。

参考链接:http://blog.csdn.net/xkdcc/article/details/1270155

http://blog.csdn.net/zy799894671/article/details/25210503

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注