一、简介
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
参考进行修改代码。