關於動態分佈函數

動態分佈函數的核心是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.”。

內存分配完畢後,通過輸入字符串爲每個指針賦初值。

最後,釋放所有分配內存。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章