मैं हस्ताक्षर के साथ एक समारोह है:रिटर्न स्टेटमेंट के बाद यह परिवर्तनीय परिवर्तन क्यों होगा?
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 अपना मान बदलता है तो यह देखने का एक आसान तरीका है कि कॉन्स्ट के साथ तर्क घोषणा को उपसर्ग करना है। कंपाइलर उस त्रुटि को फेंक देगा जहां आप अपना मूल्य बदलते हैं। –
मैंने पहले कोशिश की। कोई त्रुटि नहीं थी क्योंकि जहां तक संकलक समझता है कि यह बदल नहीं रहा है। –
फिर अपने प्रोग्राम को [valgrind] (http://valgrind.org) के साथ चलाएं। आपके कार्यक्रम का एक और हिस्सा शायद आपके ढेर को दूषित कर रहा है। –