天天看點

C 動态記憶體配置設定定義

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 函數無傳回值。

繼續閱讀