MST
星途 面试题库

面试题:C语言中二级指针在动态二维数组创建中的应用

编写一段C语言代码,使用二级指针创建一个动态的二维数组,其行数和列数由用户输入决定。然后向该二维数组中填充数据,并打印出整个二维数组。最后释放为该二维数组分配的所有内存,防止内存泄漏。
23.1万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

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

int main() {
    int rows, cols;
    printf("请输入行数: ");
    scanf("%d", &rows);
    printf("请输入列数: ");
    scanf("%d", &cols);

    // 使用二级指针创建动态二维数组
    int **arr = (int **)malloc(rows * sizeof(int *));
    if (arr == NULL) {
        printf("内存分配失败\n");
        return 1;
    }
    for (int i = 0; i < rows; i++) {
        arr[i] = (int *)malloc(cols * sizeof(int));
        if (arr[i] == NULL) {
            // 如果某一行分配失败,释放之前已分配的行
            for (int j = 0; j < i; j++) {
                free(arr[j]);
            }
            free(arr);
            printf("内存分配失败\n");
            return 1;
        }
    }

    // 填充数据
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            arr[i][j] = i * cols + j;
        }
    }

    // 打印二维数组
    printf("二维数组内容:\n");
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }

    // 释放内存
    for (int i = 0; i < rows; i++) {
        free(arr[i]);
    }
    free(arr);

    return 0;
}