空函数中的二维阵列动态分配

2darray dynamic allocation in void function

本文关键字:二维 阵列 动态分配 函数      更新时间:2023-10-16

我想在 void 函数中分配 2 x 4 二维数组。我可以在 int 函数中分配它。但我不能在虚空功能。为什么我不能在 void 函数中分配 2dArray?

这是代码。

#include <iostream>
void _2DArray(int *** arr)
{
    ** arr = new int * [2];
    for (int x = 0; x < 2; x++) {
        arr[x] = new int[4];
    }
    for (int x = 0; x < 2; x++) {
        for (int y = 0; y < 4; y++) {
            arr[x][y] = 4*x + y;
        }
    }
}
int main()
{
    int **arr = NULL;
    _2DArray(&arr);
    for (int x = 0; x < 2; x++) {
        for (int y = 0; y < 4; y++) {
            std::cout << arr[x][y] << " ";
        }
        std::cout << "n";
    }
    return 0;
}

我不知道为什么我不能分配它。请帮助我。

std::vector<std::vector<int>> Create2DArray(int width, int height)
{
    std::vector<std::vector<int>> data(height, std::vector<int>(width));
    for (int y = 0; y < data.size(); y++)
    {
        for (int x = 0; x < data[y].size(); x++)
        {
            data[y][x] = 4*x + y;
        }
    }
    return data;
}

你在那个函数参数中有太多*。 一旦你超过2 *,你应该重新考虑你想做什么。 话虽如此,以下是使该功能工作的方法。

void _2DArray(int *** arr)
{
    *arr = new int * [2];
    for (int x = 0; x < 2; x++) {
        (*arr)[x] = new int[4];
    }
    for (int x = 0; x < 2; x++) {
        for (int y = 0; y < 4; y++) {
            (*arr)[x][y] = 4*x + y;
        }
    }
}

根据标准,保留以下划线开头的全局函数。尝试重命名

_2DArray()

Create2DArray()

从文档中:

。保留名称包括以下划线开头的所有外部标识符(全局函数和变量),所有以两个下划线或下划线('_')后跟大写字母开头的标识符(无论使用方式如何)都是保留名称。这样,库和头文件就可以为内部目的定义函数、变量和宏,而不会有与用户程序中的名称冲突的风险。

编辑:@user3386109的答案按原样解决了您的问题。正如柯克@Neil所建议的那样,std::vector的解决方案将是一个更好的主意