【发布时间】:2011-12-01 22:02:57
【问题描述】:
问题:是什么导致这些值随机变化?
信息:
我的代码:
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 值?
【问题讨论】:
-
一种解释是堆栈指针值已损坏。使用调试器并仔细检查其值在 qsort 调用前后是否相同。
-
一个完整的例子会很好。您让我们猜测和推断变量的数据类型以及 cmp() 的可能副作用。