MST
星途 面试题库

面试题:C语言一维数组初始化的边界与异常处理

编写一段C语言代码,初始化一个长度为10的一维字符数组。要求在初始化过程中,对可能出现的越界访问、内存分配失败等异常情况进行处理,并在代码中添加详细注释说明异常处理的逻辑。另外,解释在这种情况下如何保证数组初始化的安全性和稳定性。
30.6万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>
#include <stdlib.h>

int main() {
    // 尝试分配长度为10的字符数组空间
    char *arr = (char *)malloc(10 * sizeof(char));
    // 检查内存分配是否成功
    if (arr == NULL) {
        // 如果内存分配失败,输出错误信息并退出程序
        fprintf(stderr, "内存分配失败\n");
        return 1;
    }

    // 初始化数组,这里简单将每个元素赋值为字符'a',并注意防止越界访问
    for (int i = 0; i < 10; i++) {
        arr[i] = 'a';
    }

    // 使用完数组后,释放分配的内存,防止内存泄漏
    free(arr);
    arr = NULL;

    return 0;
}

异常处理逻辑解释

  1. 内存分配失败处理:使用malloc分配内存后,立即检查返回值是否为NULL。如果是NULL,说明内存分配失败,此时通过fprintf输出错误信息到标准错误流,并使用return语句退出程序,避免程序继续执行导致未定义行为。
  2. 越界访问处理:在初始化数组时,使用for循环,并将循环条件设置为i < 10,确保索引i始终在合法的数组范围内,避免了越界访问。

保证数组初始化安全性和稳定性的方法

  1. 内存分配检查:每次动态分配内存(如使用malloc)后,检查返回值是否为NULL,这可以及时发现并处理内存分配失败的情况,避免程序因使用空指针而崩溃。
  2. 边界检查:在对数组进行操作(如初始化、访问等)时,确保索引值在数组的有效范围内。这里在for循环中通过i < 10限制了索引,防止越界访问。
  3. 内存释放:在数组使用完毕后,使用free函数释放分配的内存,并将指针置为NULL,防止出现悬空指针,避免潜在的内存泄漏和非法访问问题,从而保证了程序的稳定性。