示例 假设我们现在有这样一段程序: hello.c #include s td io.h #include malloc.h static char *helloWorld = "Hello, World"; main() { char *mystr = malloc(strlen(helloWorld)); strncpy(mystr, helloWorld, 12); printf("%s\n", m" name="description" />

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

发表于:2009-04-20来源:作者:点击数: 标签:Purifypurify
三、 MI LY: 宋体"> 示例 假设我们现在有这样一段程序: hello.c #include s td io.h #include malloc.h static char *helloWorld = "Hello, World"; main() { char *mystr = malloc(strlen(helloWorld)); strncpy(mystr, helloWorld, 12); printf("%s\n", m

三、           MILY: 宋体">示例

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

#include <stdio.h>

#include <malloc.h>

 

static char *helloWorld = "Hello, World";

 

main()

{

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

 

   strncpy(mystr, helloWorld, 12);

   printf("%s\n", 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环境,如果你是在WindowsTelnet客户端下执行,那么你可以在Windows下装一个叫做Exceed的工具软件,它可以方便地把X-Window显示在你的Windows桌面上)

 

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

 

 

原文转自:http://www.ltesting.net