malloc()、free()、calloc() 與 realloc()

malloc():配置空間,並傳回空間的第一個位址,配置後的空間資料是未知的。

calloc():配置空間,並傳回空間的第一個位址,並將所有的空間值初始為0。

使用malloc()或calloc()配置得來的空間,在不使用時應該使用free()歸還給記憶體。

如果要改變先前配置的記憶體大小,則可以使用realloc(),您必須先使用malloc()、calloc()或realloc()配置記憶體。

在這邊要注意的是,傳進realloc()的位址與回傳的位址並不保證相同。

realloc()會需要複製資料來改變記憶體的大小,若原位址有足夠的空間,則使用原位址調整記憶體的大小,若空間不足,則重新尋找足夠的空間來進行配置,在這個情況下,realloc()前舊位址的空間會被釋放掉。您必須使用realloc()所傳回的新位址,而不該使用舊位址,若realloc()失敗,則傳回空指標null。


REF:http://caterpillar.onlyfun.net/Gossip/CGossip/MallocFree.html

arrow
arrow
    全站熱搜

    BB 發表在 痞客邦 留言(0) 人氣()