struct Test
{
int a;
int b;
int arr[1];
int c;
};
当定义Test t; t.arr[1] = 0;时, t.arr[1]将造成arr的访问越界, 实际是覆盖了t.c变量
arr+2, arr+3等, 肯定是覆盖了更高的地址部分; c地址比arr高。 因此c可能被覆盖。
void test_func()
{
int a;
int b;
int arr[1];
int c;
//do something..
...
arr[1] = 0;//arr[1]<del>访问已越界, 将覆盖b变量。。。 continue。 好像不是如此。 但肯定是不会覆盖c; 会覆盖高地址部分、即a或者b之类的, 因为栈是高向低增长。
}</del>
arr+2、arr+3也肯定是覆盖更高地址部分。 但c/c++栈是向低地址部分增长, 因此是覆盖b甚至覆盖a。。
a:140734632597980,
b:140734632597976.
&arr[0]:140734632597968,
&arr[1]:140734632597972,
实测看, &a < &b < &c ; 且&arr[0]不在&b, &c之间,,,,