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)等。
下载地址:
解压后,得到源码 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

参考进行修改代码。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 少儿编程的学习[通俗易懂]

    少儿编程第一课1.软件的认识2.顶部工具栏的认识3.认识背景,角色,舞台区,以及他们的分别上传4.代码库和代码编辑区第一课1.软件的认识Scratch是由MIT(美国麻省理工学院)针对5至16岁的儿童和青少年设计的可视化程序设计语言与开发环境,专注于用编程实现简单的动画效果。相比其他传统的编程语言,例如VB,Java,Pascal等相比,Scratch语言创建的目的不是为了培养少年程序员…

  • java实现反射_java五大原则

    java实现反射_java五大原则一、什么是java反射?二、HelloWorld三、类加载与反射关系四、操作反射的java类五、反射的常用场景六、反射的优缺点

  • Laravel Eloquent ORM理解[通俗易懂]

    Laravel Eloquent ORM理解[通俗易懂]laravelEloquentORM文档:https://laravel-china.org/docs/laravel/5.5/eloquent/1332首先,什么是EloqentORM  官方手册是如此解释的:“Laravel的EloquentORM提供了漂亮、简洁的ActiveRecord实现来和数据库的互动。每个数据库表会和一个对应的「模型」互动”,好吧问题来了  …

    2022年10月24日
  • 普通大一学生的自我反思[通俗易懂]

    普通大一学生的自我反思[通俗易懂]​ 暑假高考完,得知自己被计科(普通本科)录取,便开始在知乎等地方搜索相关知识,以此来提高自己的认识。​ 先是在b站上跟着比特鹏哥学完了c语言(基础),这里又要有一大段故事了,我家在江苏扬州,大概是9月份突然爆发了疫情,就被关在家里不让出去,(在家里坐牢,核酸检测,基本隔一天就要做一次)就在B站上天天看鹏哥学c语言,一开始有新鲜劲,学起来还是很有动力的,后来学到指针,很是痛苦,就又专门去B站听了其他的指针教程,学着学着慢慢就明白了,当时每天的生活节奏基本就是,起床打开电脑学习c语言,学饿了,吃点饭(由于疫

  • java–抽象类

    java–抽象类

  • 宽度学习详解(Broad Learning System)

    宽度学习详解(Broad Learning System)宽度学习(BroadLearningSystem)我也是最近才知道除了深度学习,还有一个神经网络叫宽度学习(下文统称BLS)。宽度学习是澳门大学科技学院院长陈俊龙和其学生于2018年1月发表的文章提出的,文章名为《BroadLearningSystem:AnEffectiveandEfficientIncrementalLearningSystemWithoutthe…

发表回复

您的电子邮箱地址不会被公开。

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