C_and_CPP 板


LINE

開發平台(Platform): (Ex: Win10, Linux, ...) Linux Fedora Core 13 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) gcc version 4.4.4 20100503 (Red Hat 4.4.4-2) (GCC) 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) (NONE) 問題(Question): 想請教一下各位,最近我在練習撰寫鏈節串列 (Link List)刪除節點的功能,自己寫了一 段程式碼,如下: http://codepad.org/Thc6TKDW 程式功能如下: 1. 用while loop來建立一組Link List,預計可以輸入5組;若輸入0則是直接跳出; 2. 先展現一次剛剛所輸入的內容; 3. 輸入所要刪除的節點。 餵入的資料(Input): 預期的正確結果(Expected Output): 我的測試方法如下 (請看鍵盤上方的數字鍵和字母,因為這樣最方便輸入): 1. INPUT [NO / TEXT]: 1 / QQQQ; 2 / WWWW; 3 / EEEE 刪除最後一組 (3)和刪除中間那一組 (2),都沒問題。 2. INPUT [NO / TEXT]: 1 / QQQQ; 2 / WWWW; 2 / EEEE 故意輸入相同的2組,然後刪除2,也沒有問題。 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔) 補充說明(Supplement): 3. 我的問題是:當我要刪除第1筆資料的時後,就會出現記憶體錯亂的狀況;我在Google 輸入「Link List Delete」第一筆資料就是「Link List Delete First Node C」, 表示很多人都遇到這種狀況,我參考的網址如下: https://www.geeksforgeeks.org/linked-list-set-3-deleting-node/ 我的設計是─用search_and_delete_node(); 函式去做整個Link List的搜尋,如果找到 了,就用delete_node(); 函式刪除。 現在看起來,好像是這一段Code出了問題: if (current != (struct data *)NULL && current->val == value) { // 把第2個節點的記憶體位置設定給head,變成Link list的頭! head = current->next; free((void *)current); return; } 有高手知道該如何修正嗎?謝謝! -- _▃_ 老婆,我下班回來了,還買了禮物要... ╔═════════════╗ 老婆,我下班回來了,還買了禮物要... ║ ║ ] /\ 老婆,我下班回來了,還買了禮物要... 門的另一端,世界的真實 || 技術不錯嘛!"○ ○" 哇啊~好緊! ║ ║ ◣◥(|\ )) -(啪~啪!) @ Pablo Picasso G. ◥██◣ (噗滋!噗滋!)-/`○r27\"-(啊~喔~嗯~)╚═════════════╝ --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.44.173.127 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1582773830.A.E92.html
1F:→ tomsawyer: 突然想到我之前學linked list時 好像是用指標的指標 02/27 11:31
2F:→ PICASSO1: 是地!我參考的網址也是用雙指標;但我用雙指標也是遇到 02/27 11:53
3F:→ PICASSO1: 同樣的問題!我找到其它的參考網址,很多都是用刪除單一 02/27 11:54
4F:→ PICASSO1: 節點的,如removeFirstNode(); 好像沒找到像我這種混在 02/27 11:55
5F:→ PICASSO1: 一起的! 02/27 11:55
6F:推 nicknick0630: 大略看了一下,你的delete node裡面的header是local 02/27 12:40
7F:→ nicknick0630: variable 02/27 12:40
8F:→ nicknick0630: 所以你在這個函式裡面對header做的修改對於其他的 02/27 12:42
9F:→ nicknick0630: 函式來說是無效的(例如對你的search and delete來 02/27 12:42
10F:→ nicknick0630: 說) 02/27 12:42
11F:推 dces4212: 推樓上。話說你用指標的指標時是怎麼操作的呢?還有你 02/28 11:42
12F:→ dces4212: 指的記憶體錯亂可以更詳細說明意思嗎 02/28 11:42
13F:推 kingofsdtw: if(current != NULL && current->next != NULL) 02/29 02:23
14F:→ kingofsdtw: if(tmp=find(current->next)) current=tmp->next 02/29 02:27
15F:推 kingofsdtw: if(tmp==head)head=null; 02/29 02:29
16F:→ kingofsdtw: return 0; 02/29 02:29
17F:→ kingofsdtw: dummy->head->head+1-->....last->null 02/29 02:30
18F:推 kingofsdtw: 我隨意打的...看看就好 02/29 02:34
19F:推 joe820730: https://ideone.com/mP8w3Q 之前練習的東西,參考看看 03/04 22:06
20F:→ reemir: 沒有雙指標這種東西八,只有指標的指標 03/12 00:14







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP