• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

C语言数组越界怎么理解?

大少爷安安 2019-05-16 浏览量:1149
C语言中数组越界是不是超过了定义的元素个数? 会有什么影响?
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:6
  • 是的。

    数组是一段连续的内存空间,超出数组的空间访问,如果超出部分没有别分配,正常读写没啥问题,如果已经被分配那你就读写了其他数据。

    如果数据是代码,程序就会跑飞,如果程序是数据,数据就会错乱。也有可能触发地址错误,进中断里面的死循环。

    代码正常运行可以预知运行结果,代码出错后就不可控了,什么时候出错不知道,出什么错误不知道。就是不可控

  • 会造成程序异常,如果对数组的读写地址超过数组范围后,那么读取和写入的内存正好是程序其他部分,很有可能完成程序瘫痪异常

  • 数组越界是一种很危险的行为:

    1. 因为在编译时数组空间大小就确定下来,挨着的地址空间很可能分配给其他变量,而这些变量的值可能是很重要的,所以写越界会值其它变量不可控

    2. 类似上面的情况,读越界其实也很危险,因为我们不知道会有什么数据写到数组挨着的空间中,如果读到的不可控数据用作处理,很可能造成不可控的情况,试想如果是工控机器的刀具需要读取数据来控制行程,而数据是不可控的,会不会造成很大的危害?!

  • 以一个简单的一维数组为例:
    int a[10];这是一个整型的数组a,有10个元素:a[0]-a[9],因为正确的下标应该是从0开始,到9结束,与生活习惯中的1-10不一样,于是产生一个a[10]的错误,即数组下标越界。

  • 是的,数组越界就是指操作了不属于本数组的区间,越界有可能操作了别的数据内容的区域,造成其它的数据错乱,如果该内存区域是比较重要的,与系统运行有关的,就有可能导致死机

  • 数组名字实际是个指针,++或--都可能搞到数组的前面或后面去,这样会出现非法的读写。

相关问题

问题达人换一批

C语言数组越界怎么理解?