看板 C_and_CPP 關於我們 聯絡資訊
程式碼在這 https://pastebin.com/vbsc7Pnv 我寫了一個queue測試程式 DEBUG時遇到很奇怪的現象 https://imgur.com/a/Aaq69lo https://imgur.com/a/taYNpXv 明明只是執行queue[rear++]=input;這行指令 可是front的值竟然更動了 請問這是怎麼一回事 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.227.6.197 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1553768050.A.F4A.html
LPH66: 你超界了, 你的 queue 只有五格但你推了八個數字進去03/28 18:16
LPH66: 說起來你都有寫 isFull 就拿來用啊03/28 18:16
LPH66: 啊, 我看到問題了: 當你 dequeue (del) 之後 front 就不是003/28 18:18
qazStarStar: 我是故意讓他超界以測試isFull03/28 18:18
LPH66: 問題應該會發生在 26 行這個 add(1) 時03/28 18:18
LPH66: 那你就要考慮這個時候東西要存在哪裡, isFull 要怎麼改寫等03/28 18:19
LPH66: 總之結論還是超界03/28 18:20
qazStarStar: 好的 我等等改寫isFull()看看,那請問front為什麼會03/28 18:34
qazStarStar: 在我文中的位置被改值呢03/28 18:34
qazStarStar: 照理來說那行是動不到front的03/28 18:35
ecniv: 19,20行調換順序試試? 猜是超界而複寫到queue後面的變數03/28 18:49
ilikekotomi: 找可以看記憶體位置的debugger看03/28 23:29
sarafciel: 你覺得動不到那是你覺得 就好像你覺得可以超界存取陣列03/28 23:41
sarafciel: 也沒事一樣 你可以試著在Java或C#之類的語言寫看看同樣03/28 23:42
sarafciel: 邏輯的code,包準exception炸到你飛天XD03/28 23:43
謝謝各位 我接下來也有方向可以找資料了 話說我這個現象有沒有專門關鍵字可以咕狗呢 ※ 編輯: qazStarStar (115.82.244.220), 03/29/2019 00:54:40
LPH66: 會被改到的原因就是超界, 就只是它正好在你超界存取的位置03/29 08:51
adrianshum: 去看看第二誡吧...03/29 10:52
終於搞定了 感謝大家 ※ 編輯: qazStarStar (101.12.172.4), 03/29/2019 20:52:30