我對C比較陌生,現在這讓我感到困惑。它是一個更大的程序的一部分,但我寫了這個小程序來描述我遇到的問題。爲變量賦值會被存儲在錯誤的地方嗎?
#include <stdio.h>
int main()
{
signed int tcodes[3][1];
tcodes[0][0] = 0;
tcodes[0][1] = 1000;
tcodes[1][0] = 1000;
tcodes[1][1] = 0;
tcodes[2][0] = 0;
tcodes[2][1] = 1000;
tcodes[3][0] = 1000;
tcodes[3][1] = 0;
int x, y, c;
for(c = 0; c <= 3; c++)
{
printf("%d %d %d\r\n", c, tcodes[c][0], tcodes[c][1]);
x = 20;
y = 30;
}
}
我期望這個程序來輸出:
0 0 1000
1 1000 0
2 0 1000
3 1000 0
但是,相反,我得到:
0 0 1000
1 1000 0
2 0 20
3 20 30
爲此,它會爲任何數量的分配爲x和y。出於某種原因,x和y在內存中覆蓋了數組的一部分。
有人可以解釋發生了什麼?
謝謝!
它適合我。也許你的電腦有問題嗎? – 2010-04-30 01:05:14
你使用什麼編譯器?我在使用gcc的gentoo 4.1.2 – scribbloid 2010-04-30 01:05:52
這是未定義的行爲(http://en.wikipedia.org/wiki/Undefined_behavior)。它似乎在thyrgle的系統上工作,但它仍然是錯誤的。 – 2010-04-30 01:06:59