[問題] 沒做什麼,值卻不一樣了

看板C_and_CPP (C/C++)作者 (ha)時間12年前 (2013/11/11 22:03), 編輯推噓1(109)
留言10則, 2人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 想寫DFS,但是卻卡在造圖這邊。 在初始的時候將node的key設為零,兩行都是print設的key值,第一行 印出0第二行key值卻跑掉了,讓我沒辦法將其他點接上去 餵入的資料(Input): 1 1 2 預期的正確結果(Expected Output): First 0 Second 0 ha ha2 錯誤結果(Wrong Output): First 0 Second 2293700 ha4 程式碼(Code):(請善用置底文網頁, 記得排版) http://codepad.org/03ppPPLG 補充說明(Supplement): 不知道哪裡出錯了,麻煩大家幫我看一下,謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.231.115.137

11/11 22:07, , 1F
你需要 malloc 或 new 去動態配置 Node
11/11 22:07, 1F
剛剛試了,在head=InsertNode(0);前面加了 head=(tree_pointer)malloc(sizeof(Node)); 在return 0前面加了free,但是這樣就會當掉耶 若不加free的話,output就還是跟上面的一樣。 看起來是記憶體那邊被更動了? 可是平常存值不是都不會遇到這種問題嗎@@? ※ 編輯: wk4xu4j 來自: 61.231.115.137 (11/11 22:17)

11/11 22:24, , 2F
用法錯誤. 你需要去看書了解動態配置
11/11 22:24, 2F

11/11 22:24, , 3F
想清楚為什麼要 malloc
11/11 22:24, 3F

11/11 22:28, , 4F
嗯,那我研究一下,謝謝~~
11/11 22:28, 4F
我知道malloc哪裡用錯了,既然分配了就不該再把head指到InsertNode傳回 來的地方,所以要直接從head去改他的key值。 可是我不太懂為什麼原本只用InsertNode不行, 是因為call function的次數不一定,所以用function建新東西算是動態的 嗎?但我在InsertNode中沒有用malloc把那塊記憶體鎖起來,所以就有可能 被別人用掉? ※ 編輯: wk4xu4j 來自: 61.231.115.137 (11/11 23:22)

11/11 23:27, , 5F
所以我們為什麼需要動態配置? 什麼時候需要? 你已經清楚了嗎?
11/11 23:27, 5F

11/11 23:28, , 6F
那你要想清楚在 InsertNode 裡面定義的 Node 的生死
11/11 23:28, 6F

11/11 23:29, , 7F
結論是你在 InsertNode 裡面要用 malloc 去配置
11/11 23:29, 7F
嗯,知道了,這樣感覺不用malloc的情況是不是有點少,只有在生出這個變數 是很清楚知道這個變數是要做一些特定計算的時候? 還有謝謝你耐心的引導,謝謝! ※ 編輯: wk4xu4j 來自: 61.231.115.137 (11/11 23:43)

11/11 23:50, , 8F
核心問題是, 一般變數什麼時候會自動釋放記憶體?
11/11 23:50, 8F

11/11 23:51, , 9F
動態配置的重點在於你是手動配置跟手動釋放~
11/11 23:51, 9F

11/11 23:52, , 10F
可以控制記憶體釋放的時間點
11/11 23:52, 10F
一般的變數是離開那個function的時候會被釋放, 而static和global則是一直到程式結束前都會在,所以可以任意指他用他都沒關係 然後malloc則是在free之前用他都沒問題。 瞭解了,所以還是得先想一下用途再來決定變數的設法,我完全沒有考慮到 /__\ ※ 編輯: wk4xu4j 來自: 61.231.115.137 (11/12 00:23)
文章代碼(AID): #1IWEEQZg (C_and_CPP)
文章代碼(AID): #1IWEEQZg (C_and_CPP)