#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語句,這種方法就
能保證每次分配的空間在使用完后就被釋放掉。上述方法相當繁瑣,并且不能完全避免內
存漏洞的出現,因為在實際編程中,所分配的內存空間的使用時間往往是不能預測的。此
外,如果操作或刪除內存空間的程序段有錯誤,也會出現內存漏洞。例如,在刪除鏈表的
過程中,最后一個結點可能會丟失,或者一個指向內存空間的指針可能會被改寫。解決這
類問題的辦法只能是小心謹慎地編寫程序,或者象前面提到的那樣使用相應的軟件包,或
者利用語言的擴展功能。