雖然現在說這個。。多半沒有什麼意思。。但我的確在很長的一段時間不知道他的工作原理。。
所以隨便記錄下。。
它的原型是:
- 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