0

我的程序中有一个 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突然改变它的价值?

4

1 回答 1

8

一种可能的解释是您得到了未定义的行为,因为您通过写入无效的内存位置(很可能写入超出堆栈上数组的边界)以某种方式破坏了调用堆栈。这个变量placesToVisit很可能是你被砸的筹码的牺牲品。

但是,如果不查看您的代码,就无法确定。我怀疑您尚未发布的代码在某处显示缓冲区溢出。

于 2013-04-20T18:06:11.713 回答