C語言中的realloc函數動態分配內存

雖然現在說這個。。多半沒有什麼意思。。但我的確在很長的一段時間不知道他的工作原理。。

所以隨便記錄下。。

它的原型是:

  1. extern void * realloc(void * __ptr,size_t __size);  

第一個參數是爲試圖更改大小的原堆文件,size爲新的內存大小。

1.如果內存減少,則僅改變下索引信息,但並不代表被減少的部分內存還可以安全訪問,這己經釋放。

2.如果擴大內存空間,則返回情況如下:

 (1),如果當前內存段後面擁有需要的內存空間,則直接擴展這段內存空間,返回原指針

   (2),如果當前內存段後面的空閒字節不夠,那麼就使用堆中第一個能夠滿足這一要求的內存塊,

將目前的數據複製到新的位置,並將原來的數據塊釋放掉,返回新的內存位置指針

  (3)如果申請失敗,返回NULL,此時原來的指針仍有效。、、


因此調用時會返回新的指針,應該判斷,而原來指針會釋放,不需要重新手動釋放,因此下面的使用方式不好:

ptr = realloc (ptr , new_size);


摘抄自:linux高級程序設計



http://blog.csdn.net/blank_bird/article/details/6766792
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章