[问题] 变量无缘无故被赋予新的值

楼主: 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