void * realloc(void * mem_address, unsigned int newsize)
功能
先判斷當前指標是否有足夠的連續空間:
- 如果有,擴大
mem_address
指向的地址,返回mem_address
- 如果沒有,先按
newsize
指定的大小分配空間,將原資料從頭到尾拷貝到新分配的記憶體區域,而後釋放原來的mem_address
所指記憶體區域(這是自動的),同時返回新分配記憶體區域的首地址。
引數取值的幾種情況
mem_address != NULL && newsize == 0
此時返回NULL
,原空間自動釋放。
mem_address != NULL && newsize != 0 // 且空間分配失敗
此時返回NULL
,原空間未釋放。
mem_address == NULL && newsize != 0
此時相當於函式malloc
。
注意
引數mem_address
必須是函式malloc
、calloc
或realloc
返回的地址。
引數newsize
應當不小於原長。