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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux 修改文件权限命令_linux给权限命令

    linux 修改文件权限命令_linux给权限命令查看文件权限ls-h命令修改文件权限修改方法1:(参数)命令:chomod语法:chomod[参数][augo][+-=][rwx]文件名例子:1.将文件file1.txt增加可读权限chmodugo+rfile1.txt2.将文件file1.txt设为所有人(all)可读chmoda=rfile1.txt3.为ex1.py文件拥有者取消可执行权限chmodu-xex1.py修改方法2:(数字)命令:chmod语法..

    2022年9月12日
    0
  • WinExec执行批处理命令

    WinExec执行批处理命令proceduredeleteDirtyRz;varstr:string;beginstr:=’del’+appPath+’USedLog\*.log’;WinExec(PChar(‘cmd.exe/c’+str),SW_HIDE);end;加了/c参数后它将运行/c后面的命令不加参数的话,它只执行CMD命令.解析:doc输入:CMD/?启…

    2022年7月11日
    12
  • 01字典树 详解「建议收藏」

    01字典树 详解「建议收藏」欢迎关注我的个人博客:www.zuzhiang.cn以前只知道字典树可以降低空间复杂度,今天无意中接触了01字典树,原来可以用它来降低时间复杂度,下面我就来给大家介绍一下01字典树的原理和应用。01字典树主要用于解决求异或最值的问题。我先放上简单的模板,然后再讲解它的原理。inttol;//节点个数LLval[32*MAXN];//点的值i…

    2022年9月7日
    0
  • 代价函数的意义

    代价函数的意义我们来复习上一节的知识:假设函数:hθ(x)=θ0+θ1xh_\theta(x)=\theta_0+\theta_1xhθ​(x)=θ0​+θ1​x参数:θ0,θ1\theta_0,\theta_1θ0​,θ1​代价函数:J(θ0,θ1)=12m∑i=1i=m(h(xi)−yi)2J(\theta_0,\theta_1)=\frac{1}{2m}\sum_{i=1}^{i=m}(h(x^i)…

    2022年5月10日
    49
  • android studio SDK 安装不成功

    android studio SDK 安装不成功第一次安装androidstudio出现的问题问题1:无法访问androidstudio官网解决:1:https://developer.android.google.cn/studio/install?hl=zh-cner.android.google.cn/studio/install?hl=zh-cn一定是要带google的地址才行,这是google给中国用的;2:访问到了还不一定行,有可能点击下载时页面还是报错了,这时候需要检查自己网络的原因,我就是因为连接了公司的网络导致下载不了

    2022年7月21日
    35
  • 第三章:activiti流程工具使用和学生请假流程实例

    第三章:activiti流程工具使用和学生请假流程实例第三章:activiti流程工具使用和学生请假流程实例

    2022年4月23日
    52

发表回复

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

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