#include<stdio.h>
#include<stdlib.h>
/**Say hello to the user's and put the user's name in UPPERCASE.*/
void SayHi(char*name)
{
char* UpName;
int a;
UpName=malloc(strlen(name)+1);
/*Allocate space for the name*/
for(a=0;a<strlen(name);++a)
UpName[a]=toupper(name[a]);
UpName[a]='\0'i
printf("Hello,%si\n",UpName);
}
int main()
{
SayHi("Dave");
return(0);
}
这段程序中的问题是显而易见的——它为存储使用大写字母的名字分配了临时空间,但从
未释放这些空间。为了保证永远不发生类似的情况,你可以采用这样的方法:在分配内存
的每条语句后加上相应的free语句,然后把使用这些临时内存的语句插到这两条语句之间。
只要在程序中分配和释放内存的语句之间没有break,continue或goto语句,这种方法就
能保证每次分配的空间在使用完后就被释放掉。上述方法相当繁琐,并且不能完全避免内
存漏洞的出现,因为在实际编程中,所分配的内存空间的使用时间往往是不能预测的。此
外,如果操作或删除内存空间的程序段有错误,也会出现内存漏洞。例如,在删除链表的
过程中,最后一个结点可能会丢失,或者一个指向内存空间的指针可能会被改写。解决这
类问题的办法只能是小心谨慎地编写程序,或者象前面提到的那样使用相应的软件包,或
者利用语言的扩展功能。