c - 变量意外更改值

标签 c

我的程序中有一个 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/

相关文章:

c# - 计算 pow(45,60) mod 61

C:如何通过套接字读取和解包消息?

C 代码迭代器按 sizeof(int) 而不是按字节递增

c - 序列化其中包含 union 和结构的结构

c - 打印一个随机数返回一个负数。 (/开发/随机)

const char * str 问题

c - 在一大块中分配 3D 矩阵

c - 将两个文件异或加密到第三个文件

c++ - 使用 __asm 从十六进制偏移调用函数

c - 提取设置为 1 的位索引的最有效方法