memwatch使用[通俗易懂]

memwatch使用[通俗易懂]一、简介memwatch可以跟踪程序中的内存泄漏和错误,能检测双重释放(double-free)、错误释放(erroneousfree)、没有释放的内存(unfreedmemory)、溢出(Overflow)、下溢(Underflow)等。下载地址:http://www.linkdata.se/sourcecode/memwatch/解压后,得到源码memwa

大家好,又见面了,我是你们的朋友全栈君。

一、简介
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 main(int argc,char **argv)
{
 
  
 int i = 0;
 
  
 char *p;

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

 
  
 p = malloc(100);
 
  
 p = malloc(200);
 
  
 free(p);

 
  
 for(i=0;i<5;i++)
 
  
 {
 
  
  
  
 p = malloc(50);
 
  
  
  
 if(p == NULL)
 
  
  
  
 {
 
  
  
  
  
  
 printf(“can’t malloc memory for test,num:%d\n”,i);
 
  
  
  
  
  
 continue;
 
  
  
  
 }

 
  
  
  
 if((i%2) == 0)
 
  
  
  
 {
 
  
  
  
  
  
 free(p);
 
  
  
  
  
  
 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 sizeof(mwData)==32 mwDataSize==32


Stopped at Wed Mar  
9 14:52:14 2016

unfreed: <9> ../main.c(26), 50 bytes at 0x855c3a0  
 {FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE …………….}
unfreed: <6> ../main.c(26), 50 bytes at 0x855c268  
 {FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE …………….}
unfreed: <1> ../main.c(20), 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

参考进行修改代码。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/158654.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JAVA获取服务器路径的方法

    JAVA获取服务器路径的方法1、在JSF环境中获取到ServletContext:12ServletContextsc=(ServletContext)FacesContext.getCurrentInstance

    2022年7月4日
    23
  • poe交换机跟普通交换机的区别_以太网交换机和poe交换机的区别

    poe交换机跟普通交换机的区别_以太网交换机和poe交换机的区别众所周知电气设备只有通电后才能工作,而一些基于IP网络的各种设备也同样需要供电才能使用,自从有了poe供电技术后IP网络设备就又多了一种供电方式。那么具体poe工业以太网交换机可以当普通工业以太网交换机用吗,poe工业以太网交换机有哪些优势呢?poe工业以太网交换机可以当普通工业以太网交换机用吗poe工业以太网交换机的可以当作普通工业以太网交换机来用的,不过必要是正规厂商生成的支持802.3at/af协议的poe工业以太网交换机,因为这些poe工业以太网交换机在供电前会先提供1个低电压检测前..

    2022年10月5日
    2
  • 解决ubuntu16.04中codeblocks中文显示不全的问题[通俗易懂]

    解决ubuntu16.04中codeblocks中文显示不全的问题[通俗易懂]ubuntu16.04中安装中文库、中文输入法、搜狗输入法、解决终端无法显示中文的问题、安装字体(YaheiConsolas字体)、更换漂亮绚丽flatbulous主题。codeblock设置字体为:kacstdigital或centuryschoolbookl解决中文注释显示不全的问题,修改codeblocks丑陋的运行窗口为ubuntu16.04默认的终端。

    2022年7月26日
    19
  • Android Studio如何实现音乐播放器(简单易上手)

    Android Studio如何实现音乐播放器(简单易上手)我们大家平时长时间打代码的时候肯定会感到疲惫和乏味,这个时候一边播放自己喜欢的音乐,一边继续打代码,心情自然也愉快很多。音乐带给人的听觉享受是无可比拟的,动听的音乐可以愉悦人的身心,让人更加积极地去热爱生活。大家平常应该会用QQ音乐、网易云音乐或者酷狗音乐等音乐APP来听歌,想不想拥有属于自己的音乐播放器。那么接下来就教大家如何用AndroidStudio自己制作一个音乐播放器APP。

    2022年6月6日
    39
  • Linux解压zip格式压缩包

    Linux解压zip格式压缩包Linux中zip格式的压缩与解压一、安装yuminstall-yunzip二、使用(一)、压缩常见用法有zip-q-r1.zip1.txt将当前目录下的1.txt压缩为1.zip。选项-q表示忽略执行过程,-r表示递归处理,将指定目录下的所有文件和子目录一并处理zip-q-r1.zip../1.txt将上级目录中的1.txt压缩为1.zip(二)、解压假设当前目录有一个压缩包为1.zip常见的用法有unzip1.zip直接解压到当前目录下

    2022年5月10日
    48
  • MySQL 拼接字符串_合并字符串的库函数是

    MySQL 拼接字符串_合并字符串的库函数是原文请查看MySQL拼接字符串函数CONCAT这里selectconcat(updatesale_personbodysetoldill_code=/,code,/,oldill_reportname=/,reportname,/,oldill_oldtitle=/,oldtitle,/whereoldill=)fromtj_oldill

    2022年9月1日
    10

发表回复

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

关注全栈程序员社区公众号