[問題] Realloc 後記憶體位置的問題

看板C_and_CPP (C/C++)作者 (Rex)時間16年前 (2009/07/14 23:38), 編輯推噓3(3018)
留言21則, 3人參與, 最新討論串1/1
請問 realloc 之後,之前已存資料的記憶體位置改變是正常的嗎? 我寫了個簡單的測試程式如下,在 Linux 和 windows 上跑的結果不一樣, int main(){ int i; int * p = calloc(10, sizeof(int)); for(i=0;i<10;i++) p[i]=i; int * p2 = realloc(pm, sizeof(int) * 20) ..... p2[0] = -1; ..... } 在 Linux 上,p 和 p2 指的記憶體空間一樣 ( p2[0] = p[0] = -1 ) 而在 windows 上就不一樣,怎麼會這樣呢? ( p[0] = 0 ; p2[0] = -1 ) 那在 windows 上的 p 所指的空間要另外 free 嗎? 還是 realloc 的時候程式就會自己釋放記憶體該空間? ==================================================================== 我主要之目的是在 main() 裡宣告一 memory pool, 給我要實作的資料結構用,這些接構本身都是用數個指標串在一起, 當 input 的量太大時,再用 realloc 增加空間, 但是若前面已經有資料的記憶體位置更動,那我整個結構就 ... 毀掉了 ... (目前就是有這樣的問題存在 ... ) 而我這隻程式又主要在 windows 上跑,請問大大們建議用什麼方法解決呢? 還是說 memory pool 不是這樣用的? 我對此概念有所誤解呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.133.18.7

07/14 23:55, , 2F
realloc/ 自己接起來; 簡單說, 換adddress是正常的, 然
07/14 23:55, 2F

07/14 23:56, , 3F
後不用自己free; 話說, 都自己link了, 新的資料往後串下
07/14 23:56, 3F

07/14 23:56, , 4F
去就好, 為什麼會搞到要realloc, 然後整個list爛掉呢?_?
07/14 23:56, 4F

07/14 23:58, , 5F
因為我想練習用 memory pool,看來我好像不應該這樣搞
07/14 23:58, 5F

07/14 23:59, , 6F
那位麼 Linux 上就不會換 address 呢?
07/14 23:59, 6F

07/15 00:00, , 7F
而我參考的書籍也是寫,realloc會直接在後面要記憶體 @@
07/15 00:00, 7F

07/15 00:03, , 8F
運氣好不好的問題, 無論 win or linux 都沒有保證會拿到原本
07/15 00:03, 8F

07/15 00:03, , 9F
的那個位址, 詳細看看 manpage 就知道了
07/15 00:03, 9F

07/15 00:05, , 10F
如果位置有變, 舊的那個 realloc 會幫你 free 掉
07/15 00:05, 10F

07/15 00:06, , 11F
了解~ 謝謝兩位大大的說明
07/15 00:06, 11F

07/15 00:08, , 12F
那「realloc 只適用在陣列結構」這個想法對嗎?
07/15 00:08, 12F

07/15 00:09, , 13F
你的問題頗籠統, realloc適合用在它適合的地方....~_~
07/15 00:09, 13F

07/15 00:09, , 14F
問題在我不明白你的memory pool到底是什麼東西, 如果你
07/15 00:09, 14F

07/15 00:10, , 15F
是想練習自己開一大塊mem然後自己管理/分配這個空間, 那
07/15 00:10, 15F

07/15 00:10, , 16F
麼除了一開始malloc一大塊回來與最後完整的還掉以外,
07/15 00:10, 16F

07/15 00:11, , 17F
中間對這快memory的操作就不應該再用到內建的mem管理函
07/15 00:11, 17F

07/15 00:12, , 18F
數; 而是自己建表管理這整塊mem, 自己寫ALLOC/FREE出來.
07/15 00:12, 18F

07/15 00:13, , 19F
如果你的mem pool不是這個意思, 請無視小弟上面的推文:)
07/15 00:13, 19F

07/15 00:15, , 20F
大大,就是您的意思,太感謝您的解說了,我大概知道方向
07/15 00:15, 20F

07/15 00:15, , 21F
了,謝謝。
07/15 00:15, 21F
文章代碼(AID): #1ANAQ7NQ (C_and_CPP)
文章代碼(AID): #1ANAQ7NQ (C_and_CPP)