realloc也是在堆中開辟空間,但與普通的開辟空間不同。它用來擴大已經開辟好的空間。
用法為:
void *realloc(*mem_addr,unsigned int newsize)
含義是:(資料類型*)realloc(要擴大記憶體的指針名,新的記憶體大小)
這裡有2種情況:
1、夠開辟新的newsize,即mem_addr開始的空閑記憶體不小于newsize,則傳回mem_addr。
2、不夠開辟的newsize,即mem_addr開始的空閑記憶體小于newsize,則會換一個新的地方重新開辟newsize大小的記憶體,并将mem_addr處開始的資料自動拷貝到新的位址,mem_addr開始的原來的記憶體也自動釋放掉,不用手動free。傳回新的首位址。
關于傳回值:
1、如果參數mem_addr=NULL,則realloc與malloc一樣,開辟newsize大小的空間,傳回開辟的記憶體位址。
2、如果參數newsize=0,則釋放掉原記憶體空間,相當于free,傳回NULL。
3、“擴大”成功,傳回mem_addr。
4、不能再原位址擴大的,“重新開辟”成功,傳回新的記憶體位址。
5、“擴大”與“重新開辟”都不成功,則傳回NULL,原記憶體不變。