[問題] ACM 101 - Runtime Error (已解決)

看板C_and_CPP (C/C++)作者 (小刀)時間11年前 (2014/10/26 02:47), 11年前編輯推噓2(2011)
留言13則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Dev-C++ 問題(Question): 自己測output沒有問題,不曉得為什麼一直出現Runtime Error... 餵入的資料(Input): 10 move 9 onto 1 move 8 over 1 move 7 over 1 move 6 over 1 pile 8 over 6 pile 8 over 5 move 2 over 1 move 4 over 9 quit 預期的正確結果(Expected Output): 0: 0 1: 1 9 2 4 2: 3: 3 4: 5: 5 8 7 6 6: 7: 8: 9: 程式碼(Code):(請善用置底文網頁, 記得排版) http://codepad.org/YeGwKn8o (已加註解) 補充說明(Supplement): 問題:http://uva.onlinejudge.org/external/1/101.html 41~46行:應該會在這裡讀到quit出去迴圈 如果下一個是EOF 31行:while (scanf("%d",&block) != -1) 在這行應該就會結束程式了 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.64.4 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1414262872.A.994.html

, , 1F
a == b ??
你是說blocka == blockb嗎? 我有爬過文知道a跟b在同一個block 不用動作 (89行)

10/26 23:44, , 2F
107, 108有問題,你clear已經free,又去使用他
10/26 23:44, 2F

10/26 23:46, , 3F
Node* temp = clear->next;free(clear);clear = temp;
10/26 23:46, 3F

10/26 23:46, , 4F
這樣就可以
10/26 23:46, 4F
欸? 我居然沒發現這個問題@@ 感謝大大!! 目前已改成: Node *clear,*tmp; for(i=0;i<block;i++) { clear = top[i]; while(clear != NULL) { tmp = clear; free(clear); clear = tmp->next; } } 但Uva還是Runtime Error 囧rz 好像還有其他問題....我再檢查看看指標跟陣列

10/27 05:57, , 5F
你貼的改版沒改到問題... tmp=clear 只複製了位址, 那塊記憶
10/27 05:57, 5F

10/27 05:57, , 6F
體在 free(clear) 後就不能用了, tmp->next 跟 clear->next
10/27 05:57, 6F

10/27 05:58, , 7F
沒有差別, 都是未定義行為. 改成 bluesoul 的作法試試看?
10/27 05:58, 7F
呃 不好意思 我居然犯了兩次一樣的錯= = Node *clear,*tmp; for(i=0;i<block;i++) { clear = top[i]; while(clear != NULL) { tmp = clear->next; free(clear); clear = tmp; } } 但RE的問題還是沒解決...

10/27 09:27, , 8F
仔細看了一下, aelin 說得可能是問題所在? line 89 只防pile
10/27 09:27, 8F

10/27 09:27, , 9F
over, 其他三種指令碰到 a b 在同堆也會出錯吧
10/27 09:27, 9F

10/27 09:32, , 10F
而且你弄錯其他三種指令的意義了, 重讀一次題目...
10/27 09:32, 10F

10/27 12:34, , 11F
101畫個流程圖 難度馬上減半
10/27 12:34, 11F
感謝回文的各位 我把程式重新修過了(連結已更新) 目前我用cmd: block < input.txt > output.txt 測試兩輪的數據沒有問題 但RE的問題還是在 快崩潰了= =

10/27 22:03, , 12F
我測 19 pile 2 onto 0 quit 就Segmentation fault了
10/27 22:03, 12F
我也測到了! 但我在98行加了 97 blocka = search(a,top,block); 98 printf("%d\n",blocka); 居然就過了@@ 這....這什麼巫術~~ 我多加了判斷a b的illegal command(63~69行) 目前已經解決RE了!!! 進展到Wrong Answer 謝謝大家的幫忙 應該就快成功了!!

10/28 07:03, , 13F
→ scwg: 而且你弄錯其他三種指令的意義了, 重讀一次題目...
10/28 07:03, 13F
耶~總算AC啦!! 果然是aelin大大講的我的陣列在[--i]的時候忘了判斷 (i!=0) 存取到arr[-1]導致RE 也感謝scwg大大 我的確弄錯指令的意思了orz 謝謝你們!!! 貢獻一下AC code:http://codepad.org/SfbHbRJF ※ 編輯: jammy50605 (140.113.64.4), 10/31/2014 01:59:53
文章代碼(AID): #1KI_1OcK (C_and_CPP)
文章代碼(AID): #1KI_1OcK (C_and_CPP)