1. 程式人生 > >C語言中realloc()的用法

C語言中realloc()的用法


realloc 用過很多次了,無非就是將已經存在的一塊記憶體擴大,如;

char* p = malloc(1024);
char* q = realloc(p,2048);
現在的問題是我們應該如何處理指標 p。 剛開始按照我最直觀的理解,如果就是直接將 p = NULL, 到最後只需要釋放 q的空間就可以了。
因為最近在做個封裝。結果在做單元測試的時候發現。有時候我在 free(q); 的時候會出錯。這樣我就鬱悶了。
後來仔細一跟蹤,發現 realloc 完以後 q 和 p 的指標地址是一樣。不過有時候又不一樣。
仔細查了下資料。得到如下資訊:
       1.如果 當前連續記憶體塊足夠 realloc 的話,只是將p所指向的空間擴大,並返回p的指標地址。 這個時候 q 和 p 指向的地址是一樣的。
       2.如果 當前連續記憶體塊不夠長度,再找一個足夠長的地方,分配一塊新的記憶體,q,並將 p指向的內容 copy到 q,返回 q。並將p所指向的記憶體空間刪除。
這樣也就是說 realloc 有時候會產生一個新的記憶體地址 有的時候不會。所以在分配完成後。我們需要判斷下 p 是否等於 q。並做相應的處理。
這裡有點要注意的是要避免 p = realloc(p,2048); 這種寫法。有可能會造成 realloc 分配失敗後,p原先所指向的記憶體地址丟失。