商讯信箱
用户名: @
密  码:   注册|忘记密码
登录
个人用户经销商
您的位置:首页 > 技术频道 > 正文

C/C++内存问题检查利器—Purify

作者:ITPUB论坛  2008-05-20

    三、 示例 

    假设我们现在有这样一段程序:hello.c

#include

#include

static char *helloWorld = Hello, World;

main()

{

char *mystr = malloc(strlen(helloWorld));

strncpy(mystr, helloWorld, 12);

printf(%s , mystr);

}

    很明显,这段程序中有内存上的错误,假设我们疏忽了这些错误,当我们使用Purify进行测试时,我们会发现这段程序中的内存错误在Purify下很容易就被找出来了。首先,我们要做的是使用Purify编译这段程序:

> purify gcc -g -o hello hello.c

Purify 2003.06.00 Solaris 2 (32-bit) Copyright (C) 1992-2002 Rational Software Corp.
All rights reserved.

Instrumenting: cckc6pUD.o Linking

    记得加上“-g”的选项,不然,purify不能显示源程序。好了,现在在当前目录下产生了可执行文件——hello,在运行hello之前,我们还得注意,执行被Purify编译过的程序,有可能会出现X-Windows,所以请注意设置DISPLAY环境,如果你是在Windows的Telnet客户端下执行,那么你可以在Windows下装一个叫做Exceed的工具软件,它可以方便地把X-Window显示在你的Windows桌面上)

    好了,我们现在执行hello程序,就可以看到下面的一个窗口:

    我们可以看到Purify的报告中有两个内存错误,一个是ABR(Array Bounds Read)——数组越界读,一个是12个字节的Memory Leaked,展开小三角符号,我们可以看到更为详细报告:

    展开ABR错误后,我们可以看到,ABR错误的产生是由printf产生的,而产生错误的内存是mystr。

1 2
【内容导航】
第1页: 引言 第2页: 示例
©版权所有。未经许可,不得转载。
[责任编辑:robert]
[an error occurred while processing this directive]