当心数组越界陷阱

    今天在项目中,发现了一个由于数组越界访问的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[200];
  5. };
  6. int main()
  7. {
  8.     struct test t;
  9.     int result;
  10.     for(int i=0;i<200;i++)
  11.     {
  12.         t.b[i]=i+1;
  13.     }
  14.   
  15.     printf("the result is %d",result);
  16.     return 0;
  17. }

    因此,切记在访问或者操作数组时,一定要对数组下标进行校验,例如上面的例子可以修改为:

  1. if(index<10&&index>=0)
  2. {  
  3.     result=a[index]);
  4. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值