gpt4 book ai didi

c - 为什么这个变量会在 return 语句后改变?

转载 作者:太空狗 更新时间:2023-10-29 14:59:44 24 4
gpt4 key购买 nike

我有一个带有签名的函数:

int exe(int stack[][STACKSIZE], int sp[], int reg[][REGISTERSIZE], int next_instruct[],
int next_inst[], int cur_proc, int *terminate);

它有最后两行:

printf("TWO cur_proc: %d\n",cur_proc);
return NORMAL;

并且这样调用:

printf("ONE cur_proc: %d\n",cur_proc);
msg = exe(stack,sp,reg, next_instruct, next_instruct, cur_proc, &terminate);
printf("THREE cur_proc: %d\n",cur_proc);

我正在传递 cur_proc,它被认为是 exe() 中的“只读”(按值传递并不重要)变量。在 exe() 中执行我的操作。

我的输出是:

ONE cur_proc: 1
TWO cur_proc: 1
THREE cur_proc: -1

这让我很困惑,因为我看不出有任何理由可以用负数覆盖它。

这种奇怪行为的可能原因是什么?

最佳答案

您可能在其中一个数组的边界之外写入。

在函数内部,您正在查看调用函数中变量的副本,而不是原始变量。因此,函数内的 printf() 不会告诉您值在调用函数中何时损坏。

查看传递的数组,在函数内部被修改的数组最有可能是罪魁祸首 - 或者被修改的数组。由于没有一个数组是 const 限定的,因此很难说哪些被修改了,但有些东西可能越界了。

如果您想跟踪调用函数中 cur_proc 的更改何时从被调用函数内部发生,请将指向 cur_proc 的指针传递给函数 - 以及或者代替值 - 并通过指针打印值。

关于c - 为什么这个变量会在 return 语句后改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6166239/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com