欢迎来到培训无忧网!

全国切换

咨询热线 400-001-5729

位置:培训无忧网 > 新闻资讯 > 电脑/IT > c语言 >  C语言培训问答之为什么没有数组下标越界检查?

C语言培训问答之为什么没有数组下标越界检查?

来源:www.pxwy.cn 发布人:星星

2021-12-24 11:03:27|已浏览:146次

数组下标越界检查

      各位,相信你们对数组的使用已经再熟悉不过了,不过大家有没有想过数组使用的越界问题,换句话说,C对数组的长度范围会进行检查吗?

      答案是不会。因此当向数组越界写入数据的时候,经常产生“内存被破坏”的问题。如果在较早的阶段,操作系统发现异常并且提示Segmentation fault,或者“强制关闭异常的应用程序”。但此时相邻变量的值已经被破坏,程序却还在继续运行,那后果就不可想象了。既然这样,为什么C标准还是不会去检查呢?
       有人说频繁地进行范围检查会影响效率,但至少应该让我们在编译的时候可以使用一个选项,以便要求编译器在调试模式下编译程序的时候,帮我们实施数组下标范围的检查。有这样的想法的人,不只是我一个吧。但是,请稍微再想一想这个问题。对于C来说,当数组出现在表达式中的时候,它会立刻被解读成指针。此外,使用其他的指针变量也可以指向数组的任意元素,并且这个指针可以随意进行加减运算。引用数组元素的时候,虽然你可以写成a[i],但是它只不过是*(a+i)的一种表达。
       还有,当你向一个函数传递数组的时候,实际上你传递的是一个指向初始元素的指针。如果这个函数还存在于其他的代码文件中(另外一个编译单元),那么通过编译器是不可能追踪到数组的。要求这样的语言在编译时生成检查数组长度的代码,是不是有些强人所难?其实如果你一定要进行数组长度检查,可以考虑将指针封装成结构体那样,运行时让指针自身持有可取值范围的信息。可是这么做对性能的影响很大,同时,也丧失了非调试模式下编译后的库和指针的兼容性。

       因此C不会对数组进行越界检查,实际上,除了某些解释型的编程语言之外,目前几乎没有编译器可以为我们做数组的越界检查。这就对我们写代码的提出了一些要求,那大家以后就要注意了!

       本文由培训无忧网达内教育专属课程顾问老师整理发布,更多C语言课程信息可关注培训无忧网C语言培训频道或添加老师微信:15033336050

      注:尊重原创文章,转载请注明出处和链接 https://www.pxwy.cn/news-id-9752.html 违者必究!部分文章来源于网络由培训无忧网编辑部人员整理发布,内容真实性请自行核实或联系我们,了解更多相关资讯请关注c语言频道查看更多,了解相关专业课程信息您可在线咨询也可免费申请试课。关注官方微信了解更多:150 3333 6050

留下你的信息,课程顾问老师会一对一帮助你规划更适合你的专业课程!
  • 姓名:

  • 手机:

  • 地区:

  • 想学什么:

  • 培训无忧网
免 费 申 请 试 听
提交申请,《培训无忧网》课程顾问老师会一对一帮助你规划更适合你的专业课程!