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 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog