動態分佈函數的核心是malloc()和free()。每次調用malloc()時,軍分配剩餘空內存的一部分;每次調用free()時,均向系統返回內存。被分配的空內存區中的內存叫做堆(heap)。動態分配函數的原型在<stdlib.h>中。
函數malloc()的原型如下:
void *malloc(size_t size);
函數返回一個指針,指向從堆中分配的內存區域(參數size的值)的首字節。當堆中的內存不能滿足分配請求時,malloc()返回空指針。使用前,必須覈實返回的指針不爲空,否則將導致系統癱瘓。
函數free()的原型爲:
void free(void *ptr);
函數free()向堆中返回ptr指向的內存,使內存可供將來再來分配。
調用free()的指針必須實現前使用動態分配系統函數分配而得到的,用無效的指針調用free()可能摧毀內存管理機制,使系統癱瘓。如果傳遞一個空指針,free()不作操作。
程序代碼如下:
#include<stdlib.h>
#include<stdio.h>
#define num 10
int main()
{
char *str[num];//定義一個字符型指針數組
//爲數組中的每個指針分配內存
for(int i=0;i<num;i++)
{
if((str[i]=(char*)malloc(128))==NULL)
{
printf("Allocation Error.\n");
exit(1);
}
//在分配的內存中存放字符串
printf("Enter string %d: ",i);
gets(str[i]);
}
//釋放內存
for(int i=0;i<num;i++)
free(str[i]);
//由於主函數有返回值,故返回0
return 0;
}
定義一個字符型指針數組str,它裏面放有num(10)個字符型的指針。使用for循環維數組中的各個指針分配內存地址,大小都爲128個字節。在分配內存的過程中,如果發現內存分配不成功(即函數malloc()的返回值爲NULL),則給出警告語句“Allocation Error.”。
內存分配完畢後,通過輸入字符串爲每個指針賦初值。
最後,釋放所有分配內存。