天天看點

C語言記憶體相關free、calloc、realloc函數

free

隻能釋放 malloc calloc realloc 動态申請的記憶體

calloc

在記憶體堆中,申請nmemb塊,每塊大小為size個位元組數的連續區域

malloc記憶體中存放的内容是随機的,calloc函數申請的記憶體内容為0。也就是說,malloc需要初始化,用calloc一旦申請空間成功,内容就為0。

realloc動态追加或減少空間

函數原型: void *realloc(void *ptr, size_t size);
           

作用:嘗試重新調整之前調用 malloc 或 calloc 所配置設定的 ptr 所指向的記憶體塊的大小。

參數:
	ptr  -- 指針指向一個要重新配置設定記憶體的記憶體塊,該記憶體塊之前是通過調用 malloc、calloc 或 realloc 進行配置設定記憶體的。如果為空指針,則會配置設定一個新的記憶體塊,且函數傳回一個指向它的指針。                       
  	size -- 記憶體塊的新的大小,以位元組為機關。如果大小為 0,且 ptr 指向一個已存在的記憶體塊,則 ptr 所指向的記憶體塊會被釋放,并傳回一個空指針。
傳回值:
	該函數傳回一個指針 ,指向重新配置設定大小的記憶體。如果請求失敗,則傳回 NULL。
	動态申請的記憶體位址可能改變,是以必須接收傳回值。
           

注意事項:

1、指向堆區的指針變量不要随意改變指向,否則可能導緻記憶體洩漏;

2、不要操作已釋放的空間,其内容不确定;

3、不要重複釋放;

防止重複釋放的操作:

if(p!=NULL)
{
    free(p);
    p=NULL;
}
           

繼續閱讀