2013-04-20 129 views
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突然改变它的价值?

+3

寻找指向栈上的东西的指针/数组操作。如果其中一个出界,它可能会损坏变量。 – DrC 2013-04-20 18:05:58

+0

你需要在这种情况下显示你的所有代码。你可能会超出缓冲区或者摧毁堆栈上的其他东西。 – 2013-04-20 18:05:59

+0

您的'dimensionLength'是否超过1290(2147483647的立方根,我认为这是您的INT_MAX的值)? – 2013-04-20 18:07:12

回答

6

一个可能的解释是,你越来越不确定的行为,因为你以某种方式通过写一个无效的内存位置(最有可能超越写在栈上的数组的边界)破坏您的调用堆栈。变量placesToVisit可能是你被捣毁的堆栈的一个伤亡人员。

但是,没有看到您的代码是无法确定的。我怀疑你没有发布的代码会在某处显示缓冲区溢出。

+0

多一点深入的调试我相信,这是后正确。不过,我最终只是从头开始重写代码,一切正常。不知道错误发生在哪里,但嘿嘿,谢谢你的帮助! – Barry 2013-04-22 12:28:47