吾爱程序员:这里有好玩的游戏和软件
当前位置:首页C语言教程 → 访问数组越界

访问数组越界

来源:网络 | 更新时间:2022-01-13 08:15:37
在诸如 Java 之类的高级语言中,有一些函数会通过生成诸如 java.lang.ArrayIndexOutOfBoundsException 之类的异常来防止您越界访问数组。但是在 C 语言中,没有这样的功能,所以程序员需要注意这种情况。

如果程序员不小心访问了超出范围的数组索引怎么办?

C 没有提供任何处理访问无效索引问题的规范。根据 ISO C 标准,它被称为未定义行为 未定义行为 (UB) 是针对程序的当前状态(例如内存)执行计算机代码的结果,其行为未由代码可以遵循的语言规范规定。这通常发生在源代码的翻译者做出某些假设时,但这些假设在执行过程中没有得到满足。

越界访问数组时未定义行为的示例

  • 访问未分配的内存位置:程序可以访问它拥有的某块内存。
// Program to demonstrate 
// accessing array out of bounds
#include <stdio.h>
int main()
{
int arr[] = {1,2,3,4,5};
printf("arr [0] is %dn", arr[0]);

// arr[10] is out of bound
printf("arr[10] is %dn", arr[10]);
return 0;
}
输出 :
arr [0] is 1
arr[10] is -1786647872
在这里可以观察到,arr[10] 正在访问包含垃圾值的内存位置。
  • 分段错误:程序可以访问一些不属于它的内存,这会导致程序崩溃,例如分段错误。
// Program to demonstrate 
// accessing array out of bounds
#include <stdio.h>
int main()
{
int arr[] = {1,2,3,4,5};
printf("arr [0] is %dn",arr[0]);
printf("arr[10] is %dn",arr[10]);

// allocation memory to out of bound 
// element
arr[10] = 11;
printf("arr[10] is %dn",arr[10]);
return 0;
}
  1. 输出: 运行时错误:分段错误(SIGSEGV)
要点:
  • 在 C 编程中保持在数组的范围内,同时使用数组来避免任何此类错误。
  • 然而,C++ 提供了std::vector类模板,它不需要执行边界检查。向量还具有可以执行边界检查的std::at()成员函数。

最新文章

热点资讯

手游排行榜

CopyRight 2020-2030吾爱程序员

鄂ICP备2021004581号-8

本站资源收集于网络,如有侵权请联系我们:35492删除0109@qq.com