真正認識 realloc 的工作方式。

2021-09-01 10:53:08 字數 688 閱讀 8663

真正認識 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原先所指向的記憶體位址丟失。

[url]

真正認識 realloc 的工作方式。

realloc 用過很多次了。無非就是將已經存在的一塊記憶體擴大或縮小。char p char malloc 1024 char q char realloc p,2048 if q q p 我們定義乙個指標變數q的真實目的是 可以防止當記憶體分配不成功時,不至於將以前的資料丟失!現在的問題是我們應...

真正認識 REALLOC 的工作方式。

realloc 用過很多次了。無非就是將已經存在的一塊記憶體擴大。char p malloc 1024 char q realloc p,2048 現在的問題是我們應該如何處理指標 p。剛開始按照我最直觀的理解,如果就是直接將 p null 到最後只需要釋放 q的空間就可以了。因為最近在做個封裝。結...

資料科學家自述 真正工作之後我才深刻認識到這五點

我從事資料科學工作了已經將近半年了,我一路上成長了很多,也犯了很多錯誤,並在這一過程中從學習了很多。不存在沒有失敗,只有反饋。而現實世界就是一種反饋機制。是的,學習之旅並不容易。我們該做的就是繼續努力,不斷學習和改進。通過這段時間的學習歷程,我發現在從事資料科學領域時,大多數初學者可能會遇到一些常見...