首頁>技術>

C語言給予了程式設計師絕對的自由,這一點在malloc函式中體現的淋漓盡致。如果一個馬虎的程式設計師在使用malloc函式,沒有仔細甄別,那會十分容易導致整個計算機奔潰。

如果你是C語言程式設計師請記住,無論在何處使用malloc申請了新的動態記憶體空間,都要主動釋放free,程式絕對不會自動幫你做這件事情。

malloc函式負責向計算機申請確定大小的記憶體空間。 free函式負責釋放malloc的申請空間。

(1)函式原型

   void  free(void *_Memory);  void * malloc(size_t _Size)

(2)標頭檔案

stdlib.h

(3)功能

     malloc負責申請size_t _Size大小的記憶體空間,並且把所申請得到的記憶體空間首地址, 作為void*返回。使用者往往必須把void*強制轉換。 	(注意:程序不會自動釋放malloc申請的變數,無論是在主函式還是子函式,都不會) 	 	正因為malloc申請記憶體不會自動釋放,所以使用malloc必須配套free主動釋放,否則申請 的記憶體空間將會一直存在到程序被結束。如果申請過多,會導致記憶體溢位

(4)基礎例項程式碼

	char* ptc = (char*)malloc(30*sizeof(char));	int* pti = (int*)malloc(30*sizeof(int));	for(int i=0;i<30;++i)	{		printf("%d ",ptc[i]);//用來依次輸出每個字元	}	for(int i=0;i<30;++i)	{		printf("%d ",pti[i]);	}p	free(ptc); 	free(pti); 

(5)輸出情況

(6)基礎例項程式碼2:

	char* ptc = (char*)malloc(30*sizeof(char));	int* pti = (int*)malloc(10*sizeof(int));	char a[]="zobol's Magic Cabin";	int b[10]={1,2,3,4,5,6,7,8,9,10};	strcpy(ptc,a);//字串複製	memcpy(pti,b,10*sizeof(int)); //陣列記憶體複製,注意第三個引數是以位元組為單位	printf("%s\n",ptc);//輸出		for(int i=0;i<10;++i)	{		printf("%d ",pti[i]);	}

(7)輸出情況:

(8)問題1:如果不用free釋放malloc申請的記憶體,會發生什麼事?回答:那你只需要很簡短的程式碼就可以榨乾你的電腦的記憶體。

	for(int i=0;i<99999999;++i)		{			malloc(300000);		}

(9)如果不用指標接住malloc申請的記憶體空間的地址,會發生什麼事情?回答:malloc已經向計算機申請了空間了,但是你沒有儲存返回的空間記憶體地址,那就等於白佔用看計算機空間。

(10)在子函式內部malloc申請的空間,會不會隨著子函式結束而釋放?回答:不會!C語言給予了程式設計師絕對的自由,malloc申請的空間,除了程式設計師主動呼叫malloc以外,絕對不會被程式自動釋放。

20
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • SQL注入-雙注入的學習