【发布时间】:2011-09-04 04:57:07
【问题描述】:
我有一个带有签名的函数:
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
这让我很困惑,因为我看不出有任何理由可以用否定的方法覆盖它。
这种奇怪行为的可能原因是什么?
【问题讨论】:
-
查看 cur_proc 何时更改其值的一种简单方法是在参数声明前加上 const。编译器将在您更改其值的确切位置引发错误。
-
我先试过了。没有错误,因为据编译器理解,它没有改变。
-
然后使用valgrind 运行您的程序。您程序的另一部分可能正在破坏您的堆。
-
确实如此。常数设置得太小。
标签: c function variables return