栈越界的区别

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之间,,,,






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值