MST
星途 面试题库

面试题:C语言数组越界错误的常见场景分析

请列举至少三种在C语言编程中容易出现数组越界错误的常见场景,并简要说明原因。同时给出相应的代码示例来演示这些场景。
30.1万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

场景一:访问数组末尾元素之后的位置

  • 原因:数组下标从0开始,最大有效下标为数组长度减1。当访问超出这个范围时,就会发生越界。
  • 代码示例
#include <stdio.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    // 访问arr[5],越界,因为有效下标范围是0到4
    printf("%d\n", arr[5]); 
    return 0;
}

场景二:循环遍历数组时边界控制不当

  • 原因:在使用循环遍历数组时,如果循环条件设置错误,导致访问到数组范围之外的元素。
  • 代码示例
#include <stdio.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    for (int i = 0; i <= 5; i++) { 
        // 当i等于5时,访问arr[5]越界,正确应该是i < 5
        printf("%d\n", arr[i]); 
    }
    return 0;
}

场景三:多维数组下标的计算错误

  • 原因:多维数组需要正确计算每个维度的偏移量,如果计算失误,就可能访问到错误的内存位置。
  • 代码示例
#include <stdio.h>

int main() {
    int arr[3][3] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };
    // 这里错误的计算导致访问越界,假设想访问arr[1][2],却写成了arr[2][3]
    printf("%d\n", arr[2][3]); 
    return 0;
}