我的程序中有一个while循环,其中一个粒子一直移动,直到它访问了一定数量的位置(由整数placesToVisit
给出)。
int dimensionLength=2;
int placesToVisit=pow(dimensionLength, 3);
while (numPlacesVisited<placesToVisit) {
// Code which makes no changes or references to placesToVisit
// at all (except a few printf commands for debugging).
}
我的问题是,在此循环的多次迭代之后placesToVisit
突然将其值更改为1(因此过早地结束循环)。它应该具有8的常量值。此变量仅用于while
循环的条件语句,没有指向它的指针,除了少量printf
命令之外没有其他引用我投入调试。什么可能导致placesToVisit
突然改变它的价值?
答案 0 :(得分:6)
一个可能的解释是你得到了未定义的行为,因为你通过写入无效的内存位置(最有可能超出堆栈上数组的边界)来破坏你的callstack。变量placesToVisit
可能是你的粉碎堆栈的牺牲品。
但是,如果没有看到您的代码,就无法确定。我怀疑你没有发布的代码会在某处显示缓冲区溢出。