C 動态記憶體配置設定
- 定義
-
- 建立記憶體的動态記憶體
-
- 釋放動态存儲區
定義
全局變量是配置設定在記憶體中的靜态存儲區的,非靜态的局部變量(包括形參)是配置設定在記憶體中的動态存儲區的,這個存儲區是一個稱為棧(stack)的區域。記憶體動态配置設定區域是存放一些臨時用的資料,這些資料不必在程式的聲明部分定義,也不必等到函數結束時才釋放,而是需要時随時開辟,不需要時随時釋放,這些資料是臨時存放在一個特别的自由存儲區,稱為堆(heap)區。
以下函數的聲明在 sstdlib.h 頭檔案中。
建立記憶體的動态記憶體
1.用 malloc 函數開辟動态存儲區。
void *malloc(unsigend int size);
此函數作用是在記憶體的動态存儲區中配置設定一個長度為 size 的連續空間。是一個指針型函數,傳回的指針指向該配置設定域的第一個位元組。如:
malloc(100); //開辟100位元組的臨時配置設定域,函數值為其第一個位元組的位址。
注意指針的基類型為 void ,即不指向任何類型的資料,隻提供一個純位址,如果此函數未能成功地執行(例如記憶體空間不足),則傳回空指針(NLULL)。
2.用 calloc 函數開辟動态存儲區
void *calloc(unsigned n,unsigned size);
此函數的作用是在記憶體的動态存儲區中配置設定 n 個長度為 size 的連續空間,這個空間一般比較大,足以儲存一個數組。
p=calloc(50,4); //開辟50*4個位元組的臨時配置設定域,把首位址賦給指針變量 p
如果配置設定不成功,傳回 NULL。
3.用 realloc 函數重新配置設定動态存儲區
void *realloc(void *p,unsigned int size);
如果已經通過 malloc 函數或 calloc 函數獲得了動态空間,想改變其大小,可以用 realloc 函數重新配置設定。
realloc(p,50); //将p所指向的已配置設定的動态空間改為50位元組
用 realloc 函數将 p 所指向的動态空間的大小改變為 size 。p 的值不變。如果配置設定不成功,傳回 NULL 。
釋放動态存儲區
void free(void *p);
此函數作用是釋放指針變量 p 所指向的動态空間,使這部分空間能重新被其它變量使用, p 應是最近一次調用 calloc 或 malloc 函數時得到的函數傳回值。如:
free(p);
free 函數無傳回值。