動態內存分配

什麼是內存的動態分配

   全局變量分配在內存中的靜態存儲區,非靜態的局部變量(包括形參)分配在內存中的動態存儲區,這個存儲區是一個稱爲(stack)的區域。除此以外,C語言還允許建立內存動態分配區域以存放一些臨時用的數據,這些數據不必在程序的聲明部分定義,也不必等到函數結束時才釋放,而是需要時隨時開闢,不需要時隨時釋放。這些數據是臨時存放在一個特別的自由存儲區,稱爲(heap)區。可以根據需要,向系統申請所需大小的空間。由於未在聲明部分定義它們爲變量或數組,因此不能通過變量名或者數組名去引用這些數據,只能通過指針來引用。


怎樣建立內存的動態分配

   對內存的動態分配是通過系統提供的庫函數來實現的,主要有malloc,calloc,free,realloc這四個函數

malloc函數

   函數原型爲

void *malloc(unsigned int size);

    其作用是在內存的動態存儲區中分配一個長度爲size的連續空間。形參size的類型定爲無符號整型(不允許爲負數)。此函數的值是所分配區域的第一個字節的地址。

    注意指針的基類型爲void,即不指向任何類型的數據,只提供一個地址。如果此函數未能成功執行,則返回空指針(NULL)。

calloc函數

   函數原型爲

void *calloc(unsigned n, unsigned size);

    其作用是在內存的動態存儲區中分配n個長度爲size的連續空間,這個空間一般比較大,足以保存一個數組。

   用calloc函數可以爲一維數組開闢動態存儲空間,n爲數組元素個數,每個元素長度爲size。這就是動態數組。函數返回指向所分配區域的起始位置指針;如果分配不成功,返回NULL。

free函數

    函數原型爲

void free(void *p);

    其作用是釋放指針變量p所指向的動態空間,使這部分空間能重新被其他變量使用。p是最近一次調用calloc或malloc函數時得到的函數返回值。

relloc函數

    函數原型爲

void *relloc(void *p, unsigned int size);

如果已經通過calloc或者malloc函數獲得了動態空間,想改變其大小,可以用relloc函數重新分配。

    用relloc函數將p所指向的動態空間的大小改變爲size。p的值不變。如果重新分配不成功,則返回NULL。

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