我有两个变量alarmMinute
和alarmHour
我让他们在每个循环中打印出来,如果我有这段代码,那么alarmMinute
在第一个循环后将降为0。
if(buttonPushed){
alarmMinute += 5;
if(alarmMinute > 60){
alarmMinute = 0;
}
}
显示器输出:
alarmHour: 14 alarmMinute: 28 currentSeconds: 6913 alarmSeconds: 6720 timeGap: 193 alarmLength: 300 AlarmProgress: 64
alarmHour: 14 alarmMinute: 0 currentSeconds: 6913 alarmSeconds: 5040 timeGap: 1873 alarmLength: 300 AlarmProgress: 0
alarmHour: 14 alarmMinute: 0 currentSeconds: 6914 alarmSeconds: 5040 timeGap: 1874 alarmLength: 300 AlarmProgress: 0
但如果我注释掉该代码,则:
if(buttonPushed){
// alarmMinute += 5;
// if(alarmMinute > 60){
// alarmMinute = 0;
// }
}
然后我丢失了alarmHour
的值:
alarmHour: 14 alarmMinute: 28 currentSeconds: 7052 alarmSeconds: 6720 timeGap: 332 alarmLength: 300 AlarmProgress: 0
alarmHour: 0 alarmMinute: 28 currentSeconds: 7052 alarmSeconds: 1680 timeGap: 5372 alarmLength: 300 AlarmProgress: 0
alarmHour: 0 alarmMinute: 28 currentSeconds: 7053 alarmSeconds: 1680 timeGap: 5373 alarmLength: 300 AlarmProgress: 0
在两种情况下,我都不按下按钮,因此代码根本不应该运行。另外,当它的值为28
时,该代码不应影响alarmMinute
,并且明确地注释该代码 不应影响alarmHour
的值,有人知道发生了什么吗?我的内存用完了吗?
答案 0 :(得分:0)
我最终发现了问题-我有一个char[12]
数组,但不小心将其填充了13个前导空格。
之所以更改代码中看似随机的部分会导致不同的变量消失,是因为擦除了数组旁边的内存。
这是令人讨厌的网络攻击的基本原理-引用超出范围的数组。