數組越界的陷阱
以前在項目中,發現了一個由于數組越界訪問的BUG。數組越界訪問的結果是未定義的,在大多數情況下,會出現空指針異常。
但是如果在結構體中,兩個數組的內存分配是連續的。為了示例方便,我將代碼做了簡化,例如如下面的test結果體中,數組a和數組b的內存是連續的,也就是說a[9]后面跟的就是b[0].
因此在訪問a的時候,如果數組越界,就會訪問到數組b中,例如a[29]=b[19]; 因此如果不對a的數組訪問進行下標校驗,將會從b中取得數據,如果在對a賦值時越界,將會對b中的數據進行修改,這將會帶來調試的巨大麻煩,表現形式是b數據在某個地方被修改了。
1
struct test
2

{
3
int a[10];
4
int b[20];
5
};
6
int main()
7

{
8
struct test t;
9
int result;
10
for(int i=0;i<20;i++)
11
{
12
t.b[i]=i+1;
13
}
14
result=*(t.a+29);
15
printf("the result is %d",result);
16
return 0;
17
}
因此,切記在訪問或者操作數組時,一定要對數組下標進行校驗,例如上面的例子可以修改為:
2



3

4

5

6

7



8

9

10

11



12

13

14

15

16

17

1
if(index<10&&index>=0)
2

{
3
result=a[index]);
4
}
5

2



3

4

5
