1. 程式人生 > >malloc ,free, realloc 和calloc

malloc ,free, realloc 和calloc

這四個函式都在#include<stdlib.h>裡面宣告。

1.malloc

形式:void  *malloc(size_t size);

說明:malloc 分配的記憶體是連續的儲存塊,而不是分開的。系統無法想向malloc提供更多的記憶體,malloc就返回一個NULL指標。

2.free

形式: void free(void *pointer);

說明:free的引數要麼是NULL,要麼是一個先前從malloc , realloc 和calloc的返回值。

3.void *calloc(size_t num_elements,size_t element_size);

4.void realloc(void *ptr,size_t new_size);

說明:calloc也用於分配記憶體.malloc和calloc之間的主要區別是後者在返回指向記憶體的指標之前把它初始化為0.這個初始化常常能帶來方便,但如果你的程式只是想把一些值儲存到陣列中, 那麼這個初始化過程純屬浪費時間。calloc 和malloc 之間另一個較小的區別是它們請求記憶體數量的方式不同。calloc 的引數包括所需元素的數量和每個元素的位元組數。根據這些值,它能夠計算出總共需委分配的記憶體。
realloc函式用於修改一個原先已經分配的記憶體塊的大小。使用這個函式,你可以使一塊記憶體擴大或縮小。如果它用於擴大一個記憶體塊,那麼這塊記憶體原先的內容依然保留,新增加的記憶體新增到原先記憶體塊的後面,新記憶體並未以任何方法進行初始化。如果它用於縮小個記憶體塊, 該記憶體塊尾業的部分記憶體便被拿掉,剩餘部分記憶體的原先內容依然保留。
如果原先的記憶體塊無法改變大小,realloc 將分配另塊正 確大小的記憶體,並把原先那塊記憶體的家有制到新的塊上。因此,在使用realloc,你就不能再使用指向舊記憶體的指標,而是應該改realloc所返回的新指標。
後如果realloc的數的第1 個引數是NULL.那麼它的行為malloc就模一樣。