我有簽名的函數:爲什麼在返回語句後這個變量會改變?
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