Gandalfool 2016-09-08 10:23 采纳率: 100%
浏览 3471
已采纳

数组越界访问时会发生什么 尽管编译不出错

int a[ 10 ] ; 访问a[ 10 ]的话就会出现越界的错误 今天想了一下 下标访问数组可以看作指针访问的形式 也就是取( & a[ 0 ] + 10 * sizeof ( int ) ) 这个地址里的内容 然后我就想 反正数组是连续存储的 用了后面那四个字节的内存又怎么样呢 应该不会是无意义的内存吧 那为什么会出现Bug或者程序中断呢 求解

  • 写回答

8条回答

  • 朕就是这么帅 2016-09-08 10:37
    关注

    数组占用了一段连续的内存空间。然后,我们可以通过指定数组下标来访问这块内存里的不同位置。因此,当你的下标过大时,访问到的内存,就不再是这个数组“份内”的内存。你访问的,将是其它变量的内存了,它的值是不确定的,不可控的,它会使按照数组读取方法调用的这块内存的其他类不能正确解析到需要的值本来你就想要个10 来了个2^32-1 你让别人怎么玩?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题