作者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/cn.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