作者qazStarStar (我不是派大星)
看板C_and_CPP
標題[問題] 變數無緣無故被賦予新的值
時間Thu Mar 28 18:14:01 2019
程式碼在這
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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1553768050.A.F4A.html
1F:推 LPH66: 你超界了, 你的 queue 只有五格但你推了八個數字進去03/28 18:16
2F:→ LPH66: 說起來你都有寫 isFull 就拿來用啊03/28 18:16
3F:→ LPH66: 啊, 我看到問題了: 當你 dequeue (del) 之後 front 就不是003/28 18:18
4F:→ qazStarStar: 我是故意讓他超界以測試isFull03/28 18:18
5F:→ LPH66: 問題應該會發生在 26 行這個 add(1) 時03/28 18:18
6F:→ LPH66: 那你就要考慮這個時候東西要存在哪裡, isFull 要怎麼改寫等03/28 18:19
7F:→ LPH66: 總之結論還是超界03/28 18:20
8F:→ qazStarStar: 好的 我等等改寫isFull()看看,那請問front為什麼會03/28 18:34
9F:→ qazStarStar: 在我文中的位置被改值呢03/28 18:34
10F:→ qazStarStar: 照理來說那行是動不到front的03/28 18:35
11F:→ ecniv: 19,20行調換順序試試? 猜是超界而複寫到queue後面的變數03/28 18:49
12F:→ ilikekotomi: 找可以看記憶體位置的debugger看03/28 23:29
13F:→ sarafciel: 你覺得動不到那是你覺得 就好像你覺得可以超界存取陣列03/28 23:41
14F:→ sarafciel: 也沒事一樣 你可以試著在Java或C#之類的語言寫看看同樣03/28 23:42
15F:→ sarafciel: 邏輯的code,包準exception炸到你飛天XD03/28 23:43
謝謝各位
我接下來也有方向可以找資料了
話說我這個現象有沒有專門關鍵字可以咕狗呢
※ 編輯: qazStarStar (115.82.244.220), 03/29/2019 00:54:40
16F:推 LPH66: 會被改到的原因就是超界, 就只是它正好在你超界存取的位置03/29 08:51
17F:→ adrianshum: 去看看第二誡吧...03/29 10:52
終於搞定了
感謝大家
※ 編輯: qazStarStar (101.12.172.4), 03/29/2019 20:52:30