MST

星途 面试题库

面试题:C++ 指针在动态数组内存管理与复杂操作中的应用

编写一个 C++ 程序,使用指针动态分配一个三维数组(数组元素类型为自定义结构体,结构体包含多个不同类型成员)。要求实现对数组元素的初始化、特定元素查找与修改、以及最终的内存释放操作,同时要考虑内存泄漏和指针越界等问题。
25.4万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

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

// 定义自定义结构体
struct MyStruct {
    int id;
    double value;
    char name[50];
};

// 初始化三维数组
void initializeArray(MyStruct*** arr, int x, int y, int z) {
    for (int i = 0; i < x; ++i) {
        for (int j = 0; j < y; ++j) {
            for (int k = 0; k < z; ++k) {
                arr[i][j][k].id = i * 100 + j * 10 + k;
                arr[i][j][k].value = i + j + k;
                std::snprintf(arr[i][j][k].name, sizeof(arr[i][j][k].name), "Element_%d_%d_%d", i, j, k);
            }
        }
    }
}

// 查找并修改特定元素
void findAndModifyElement(MyStruct*** arr, int x, int y, int z, int targetId, double newVal) {
    for (int i = 0; i < x; ++i) {
        for (int j = 0; j < y; ++j) {
            for (int k = 0; k < z; ++k) {
                if (arr[i][j][k].id == targetId) {
                    arr[i][j][k].value = newVal;
                    return;
                }
            }
        }
    }
    std::cerr << "Element with id " << targetId << " not found." << std::endl;
}

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

int main() {
    int x = 3, y = 4, z = 5;
    // 动态分配三维数组
    MyStruct*** threeDArray = new MyStruct**[x];
    for (int i = 0; i < x; ++i) {
        threeDArray[i] = new MyStruct*[y];
        for (int j = 0; j < y; ++j) {
            threeDArray[i][j] = new MyStruct[z];
        }
    }

    // 初始化数组
    initializeArray(threeDArray, x, y, z);

    // 查找并修改特定元素
    findAndModifyElement(threeDArray, x, y, z, 111, 99.99);

    // 释放内存
    freeArray(threeDArray, x, y);

    return 0;
}
  1. 自定义结构体定义:定义了 MyStruct 结构体,包含 int 类型的 iddouble 类型的 valuechar 数组类型的 name
  2. 初始化函数initializeArray 函数对三维数组中的每个元素进行初始化。
  3. 查找与修改函数findAndModifyElement 函数查找特定 id 的元素并修改其 value,如果未找到则输出提示信息。
  4. 内存释放函数freeArray 函数按照正确的顺序释放三维数组动态分配的内存,避免内存泄漏。
  5. 主函数:在 main 函数中动态分配三维数组,调用初始化、查找修改和内存释放函数。在动态分配和访问数组元素时,要注意指针越界问题,这里通过在循环中使用正确的边界条件来避免越界。