c - 变量神秘地变化

标签 c variables memory

问题:是什么导致这些值随机变化?


信息:

我的代码:

int q = nonZero;
for(j = nonZero;j>1;j--)
{
    printf("Top: %i %i\n",j,q);
    qsort(tree,j,sizeof(Node),cmp);
    printf("Bottom: %i %i\n",j,q);
    Node t = {tree[0],tree[1],-1};
    tree[0] = &t;
    tree[1] = tree[j];
    tree[j] = NULL;
}

不是一个复杂的小程序。从树的顶部两个节点中创建一个节点,使其成为新的顶部节点,对数组进行求值,重复。我添加了“q”作为调试值,我完全不知道到底发生了什么。如果我尝试让它运行,j 通常从 73 开始,它应该是这样,预计它将是 72,71,70,69,68...3,2 并且 q 将无限期地保持在 73。这是我的输出:

Top: 73 73
Bottom: -796584576 32767
Segmentation fault

但这还不是全部,无需重新编译,我得到了:

Top: 73 73
Bottom: 0 0
Segmentation fault

它始终会给我这两个输出之一。几次运行后,我看到 32767 从未改变,q 值,但 j 值,这里是 -796584576,总是一些不同的大得离谱的负数。任何人都知道为什么 qsort 似乎正在改变我的 j 值,以及似乎完全不相关的 q 值?

最佳答案

我不确定这是不是你的问题,但由于 t 是一个局部变量,它会在循环结束时超出范围,因此将它分配给 tree [0] 使 tree[0] 未定义。

关于c - 变量神秘地变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8348923/

相关文章:

css - 为什么 CSS 从一开始(直到现在)都不包含变量?

javascript - 在 javascript 中使用 handlebars 模板变量

python - 在 Python 脚本运行之间将持久变量保存在内存中

c++ - char sprintf() 句柄的限制

c - 让夹板与 win32 整数后缀一起工作

Cocoa: 'amountOfReservations' 的本地声明隐藏了实例变量。怎么了?

c++ - 指针无缘无故更改值c++

c - 如何在 C 中有效地解析大型 bz2 xml 文件

c - 为什么 Fread 以相反的顺序读取 unsigned-int?

c - 在 GDB 中运行程序给出的结果与从命令行运行程序的结果不同