精華區beta CSSE 關於我們 聯絡資訊
※ 引述《mahaw (我要賭本!!)》之銘言: : struct obj_section *obj_create_alloced_section_first( struct obj_file *f, const char *name,unsigned long align, unsigned long size : { : struct obj_section *sec; : …略 : f->sections = realloc( f->sections,(newidx+1)*sizeof(sec) ); : …略 : } : 出問題的又是第二個,就是括號裡頭的,f->sections,如果這個欄位改0,那OK,可以 : run過去,但這樣…又不是我要的。 我要保留住先前的值… : 拜託有任何idea的仁兄能給我點意見,感謝。 : 是空間不夠分了嗎…? 先確定一下 f->scections 的值是否是 malloc 傳回來的值 還是從 malloc 回傳之後又改動過的值? 我猜測是後者才會造成這樣的錯誤 如果是後者的話, 那麼會有 error 是必然的 因為 malloc 是以傳給你的 address 來 identify 他 allocate 給你的空間 若你給 realloc 的 address 並非原本 malloc 回傳的 address 的話 它就沒辦法知道該歸還的是哪一塊空間了 如果非我所猜測, 那麼可能要 trace 程式才能找得到問題了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.56
leeming:對低 你應該另外宣告一個 struct obj_section *new_sec; 03/04 00:17
leeming:然後 new_sec = realloc(...); 03/04 00:17
leeming:這樣舊的值會自動幫你複製到新的記憶體區段中! 03/04 00:21
leeming:你再把指標指過去就好了...應該是這樣吧... 03/04 00:22
mahaw:多謝兩位兄台的建議!!真的如兩位所言!!謝激不盡~~ 03/06 19:10