1. 程式人生 > >C語言動態記憶體學習筆記

C語言動態記憶體學習筆記

一、malloc返回引數有兩種情況
1,當分配的記憶體池是空的時候返回一個NULL指標。
2,當可用記憶體無法滿足要求,malloc向作業系統請求,要求更多記憶體,如果它無法向malloc提供更多記憶體就返回一個NULL指標
二、free的引數
free的引數必須是NULL或malloc,calloc,realloc返回的值,向free傳遞一個NULL引數不會產生任何效果。
三、calloc與realloc的區別

void *calloc(unsigned int num,unsigned int size);
void realloc(void *ptr,unsigned
int new_size);

1,calloc在返回指向記憶體的指標之前把他初始化位0。(malloc在宣告記憶體塊的時候並沒有初始化)calloc的引數包括所有元素的個數與每個元素的位元組數,根據這些值自動計算出所需分配的記憶體。
2,realloc用於修改一個原來已經分配好的記憶體塊大小。它可以重新改變記憶體塊的大小,在改變之後原來的記憶體塊仍然保留,新增的記憶體增加在原來記憶體快的後面,新記憶體並沒用進行初始化。縮小記憶體塊的尾部被去掉,剩餘的值仍然保留。
注: 如果原來的記憶體無法改變大小,realloc會重新分配一塊正確大小的記憶體,並且原來的那塊記憶體將被複制在新的程式碼塊。因此,使用realoc後,不能使用原來的指向記憶體的指標,而是用realloc返回的新指標!**