MST

星途 面试题库

面试题:复杂C语言多维数组初始化及动态分配

编写一个函数,该函数接收三个参数,分别表示三维数组每一维的大小。在函数内部动态分配内存创建一个三维数组,并对其进行初始化,初始化规则为每个元素的值是其三个下标的乘积。完成初始化后,在主函数中调用该函数并输出数组的部分元素以验证结果。阐述这种动态分配内存进行多维数组初始化时,需要注意的内存管理问题。
38.0万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>
#include <cstdlib>

// 动态分配三维数组并按规则初始化
int*** createAndInitialize3DArray(int x, int y, int z) {
    int*** array = new int**[x];
    for (int i = 0; i < x; ++i) {
        array[i] = new int*[y];
        for (int j = 0; j < y; ++j) {
            array[i][j] = new int[z];
            for (int k = 0; k < z; ++k) {
                array[i][j][k] = i * j * k;
            }
        }
    }
    return array;
}

// 释放三维数组的内存
void delete3DArray(int*** array, int x, int y) {
    for (int i = 0; i < x; ++i) {
        for (int j = 0; j < y; ++j) {
            delete[] array[i][j];
        }
        delete[] array[i];
    }
    delete[] array;
}

int main() {
    int x = 2, y = 3, z = 4;
    int*** arr = createAndInitialize3DArray(x, y, z);

    // 输出部分元素验证结果
    std::cout << "arr[1][2][3] = " << arr[1][2][3] << std::endl;

    delete3DArray(arr, x, y);
    return 0;
}

内存管理问题阐述

  1. 内存分配:在动态分配多维数组时,需要逐步分配每一维的内存。如上述代码,先分配最外层数组指针,再依次分配内层数组指针和实际元素内存。如果分配过程中出现内存不足,需要适当处理错误(如返回 nullptr 并提示错误)。
  2. 内存释放:释放内存时,顺序必须与分配顺序相反。先释放最内层数组,再释放中间层数组指针,最后释放最外层数组指针。如果释放顺序错误,可能导致内存泄漏。
  3. 避免悬空指针:在释放内存后,应将指针设置为 nullptr,以避免悬空指针。悬空指针指向已释放的内存,可能导致程序崩溃或未定义行为。