linux 移植 内存 配置,Linux系统移植实验--内存调试

实验九内存调试

【实验目的】

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

【实验环境】

1、ubuntu 12.04发行版

2、FS4412平台

3、交叉编译器 arm-none-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文件为:

memtest:

$(CC) -DMEMWATCH -DMW_STDIOmemtest.cmemwatch.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)缓冲区溢出,当程序执行到第12行free(ptr2)才检测到的;

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

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

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

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

0x1a7f4 was freed from memtest.c(12)

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

Stopped at Wed Dec 31 19:00:38 1969

unfreed: <2> test.c(9), 512 bytes at 0x1a3e4        {FE FE FE FE FE FE FE FE

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

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

//表示未释放的内存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值