Chinaunix首页 | 论坛 | 博客
  • 博客访问: 686254
  • 博文数量: 152
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1793
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-12 12:26
个人简介

相信自己,只有不想做的,没有做不到的。

文章分类

全部博文(152)

文章存档

2021年(1)

2015年(2)

2014年(74)

2013年(75)

分类: LINUX

2013-11-07 23:02:48

【实验目的】

段错误和内存错误是C语言编程经常遇到的问题,使用memwatch是由johan lindh编写,是一个开发源代码C语言内存错误检测工具。能检测双重释放,错误释放,没有释放内存,溢出等等情况。

【实验环境】

1、  ubuntu 10.10发行版

2、  FS_S5PC100平台

3、  交叉编译器 arm-cortex_a8-linux-gnueabi-gcc

【实验步骤】

1、  解压memwatch.-2.7.1.tar.gz,在解开的目录下添加代码memtest.c

#include

#include

#include "memwatch.h"

int main(int argc,char **argv)

{

        char *ptr1;

        char *ptr2;

        ptr1 = malloc(512);

        ptr2 = malloc(512);

        ptr1[512]="A";

        ptr2 = ptr1;

        free(ptr2);

        free(ptr1);

        return 0;

}

2、  修改  Makefile

Makefile文件为:

CC=arm-cortex_a8-linux-gnueabi-gcc

memtest:

        $(CC) -DMEMWATCH -DMW_STDIO  memtest.c  memwatch.c

5、运行make并将编译生成的可执行程序a.out拷贝到开发板的根目录下执行,会生成一个记录文件memwatch.log,内容如下:

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

 

Started at Thu Jan  1 00:08:33 1970

 

Modes: __STDC__ 32-bit mwDWORD==(unsigned long)

mwROUNDALLOC==4 sizeof(mwData)==32 mwDataSize==32

 

overflow: <3> memtest.c(12), 512 bytes alloc'd at <1> memtest.c(8)

double-free: <4> memtest.c(13), 0x1a1b4 was freed from memtest.c(12)

 

Stopped at Thu Jan  1 00:08:33 1970

 

unfreed: <2> test.c(9), 512 bytes at 0x1a3e4      {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: 2

 L)argest memory usage      : 1024

 T)otal of all alloc() calls: 1024

 U)nfreed bytes totals      : 512

//overflow: <3> memtest.c(12)缓冲区溢出,当程序执行到第15行free(ptr2)才检测到的;

512 bytes alloc'd at <1> memtest.c(9)

//表示出错缓冲区的大小为512字节,是在memtest.c的第9行分配的。很容易发现代码的ptr1[512]="A"出现错误。

double-free: <4> memtest.c(13), 0x1a7f4 was freed from memtest.c(12)

//double-free: <4> memtest.c(16)是一个双重释放的错误,表示程序执行到16行的时候才检测到。

0x1a7f4 was freed from memtest.c(12)

//表示首地址为 0x1a7f4的内存在15行已经被释放。

Stopped at Wed Dec 31 19:00:38 1969

unfreed: <2> memtest.c(10), 512 bytes at 0x1aa24        {FE FE FE FE FE FE FE FE

//表示一块内存没有释放,表示这块内存是在memtest.c的第10行分配,大小为512字节,首地址为0x1aa24。

Memory usage statistics (global):

 N)umber of allocations made: 2

 L)argest memory usage      : 1024

 //程序结束时能够是使用的最大动态内存

 T)otal of all alloc() calls: 1024 //总共分配的动态内存

 U)nfreed bytes totals      : 512

 //表示未释放的内存

阅读(1014) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~