我的程序中有一个 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
突然改变它的值?
最佳答案
一个可能的解释是你得到了未定义的行为,因为你以某种方式通过写入无效的内存位置(很可能写入超出堆栈数组的边界)来破坏你的调用堆栈。变量 placesToVisit
很可能是您破坏堆栈的牺牲品。
但是,如果没有看到您的代码,就无法确定。我怀疑您未发布的代码显示某处存在缓冲区溢出。
关于c - 变量意外更改值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16123526/