realloc 用過很多次了。無非就是將已經存在的一塊記憶體擴大或縮小。
char* p = (char*)malloc(1024);
char* q = (char*)realloc(p,2048);
if(!q)
q = p;
我們定義乙個指標變數q的真實目的是:可以防止當記憶體分配不成功時,不至於將以前的資料丟失!
現在的問題是我們應該如何處理指標 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原先所指向的記憶體位址丟失。
真正認識 REALLOC 的工作方式。
realloc 用過很多次了。無非就是將已經存在的一塊記憶體擴大。char p malloc 1024 char q realloc p,2048 現在的問題是我們應該如何處理指標 p。剛開始按照我最直觀的理解,如果就是直接將 p null 到最後只需要釋放 q的空間就可以了。因為最近在做個封裝。結...
真正認識 realloc 的工作方式。
真正認識 realloc 的工作方式。realloc 用過很多次了。無非就是將已經存在的一塊記憶體擴大。char p malloc 1024 char q realloc p,2048 現在的問題是我們應該如何處理指標 p。剛開始按照我最直觀的理解,如果就是直接將 p null 到最後只需要釋放 q...
資料科學家自述 真正工作之後我才深刻認識到這五點
我從事資料科學工作了已經將近半年了,我一路上成長了很多,也犯了很多錯誤,並在這一過程中從學習了很多。不存在沒有失敗,只有反饋。而現實世界就是一種反饋機制。是的,學習之旅並不容易。我們該做的就是繼續努力,不斷學習和改進。通過這段時間的學習歷程,我發現在從事資料科學領域時,大多數初學者可能會遇到一些常見...