[問題] 變數無緣無故被賦予新的值

作者: qazStarStar (我不是派大星)   2019-03-28 18:14:01
程式碼在這
https://pastebin.com/vbsc7Pnv
我寫了一個queue測試程式
DEBUG時遇到很奇怪的現象
https://imgur.com/a/Aaq69lo
https://imgur.com/a/taYNpXv
明明只是執行queue[rear++]=input;這行指令
可是front的值竟然更動了
請問這是怎麼一回事
作者: LPH66 (-6.2598534e+18f)   2019-03-28 18:16:00
你超界了, 你的 queue 只有五格但你推了八個數字進去說起來你都有寫 isFull 就拿來用啊啊, 我看到問題了: 當你 dequeue (del) 之後 front 就不是0
作者: qazStarStar (我不是派大星)   2019-03-28 18:18:00
我是故意讓他超界以測試isFull
作者: LPH66 (-6.2598534e+18f)   2019-03-28 18:18:00
問題應該會發生在 26 行這個 add(1) 時那你就要考慮這個時候東西要存在哪裡, isFull 要怎麼改寫等總之結論還是超界
作者: qazStarStar (我不是派大星)   2019-03-28 18:34:00
好的 我等等改寫isFull()看看,那請問front為什麼會在我文中的位置被改值呢照理來說那行是動不到front的
作者: ecniv (艾克尼夫)   2019-03-28 18:49:00
19,20行調換順序試試? 猜是超界而複寫到queue後面的變數
作者: ilikekotomi (Young)   2019-03-28 23:29:00
找可以看記憶體位置的debugger看
作者: sarafciel (Cattuz)   2019-03-28 23:41:00
你覺得動不到那是你覺得 就好像你覺得可以超界存取陣列也沒事一樣 你可以試著在Java或C#之類的語言寫看看同樣邏輯的code,包準exception炸到你飛天XD
作者: LPH66 (-6.2598534e+18f)   2019-03-29 08:51:00
會被改到的原因就是超界, 就只是它正好在你超界存取的位置
作者: adrianshum (Alien)   2019-03-29 10:52:00
去看看第二誡吧...

Links booklink

Contact Us: admin [ a t ] ucptt.com