我有签名的函数:为什么在返回语句后这个变量会改变?
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前缀。编译器会在您更改其值的确切位置发出错误。 – 2011-05-29 06:24:09
我先试了一下。没有错误,因为只要编译器知道它没有改变。 – 2011-05-29 06:40:06
然后用[valgrind](http://valgrind.org)运行你的程序。你的程序的另一部分可能会破坏你的堆。 – 2011-05-29 07:06:29