Ben imzası ile bir işlevi vardır:Bu değişken neden dönüş ifadesinden sonra değişir?
Bu son iki satırı vardırint 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;
Ve böyle denir:
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);
Ve geçen am exe()
'un içinde "salt okunur" (değerden geçirilmesi önemli değil) değişken olarak kabul edilen cur_proc
. Eşyalarımı exe()
içinde yap.
ONE cur_proc: 1
TWO cur_proc: 1
THREE cur_proc: -1
Bu benim için çok kafa karıştırıcı.
Bu garip davranış için olası bir sebep nedir?
Cur_proc değerinin ne zaman değiştiğini görmenin basit bir yolu argüman bildirimini const ile öneklemektir. Derleyici, değerini değiştirdiğiniz yerdeki bir hatayı atar. –
Önce bunu denedim. Herhangi bir hata yoktu çünkü derleyici, değişmediğini anladığı için. –
Ardından programınızı [valgrind] ile çalıştırın (http://valgrind.org). Programınızın bir başka kısmı muhtemelen yığınınızı bozuyor. –