空函数中的二维阵列动态分配
2darray dynamic allocation in void function
我想在 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
的解决方案将是一个更好的主意
相关文章:
- 二维阵列的动态分配
- C2440 使用Shared_ptr创建二维阵列
- 围绕二维阵列做一个圆圈
- 为什么一个二维阵列会导致赛段故障,而另一个则不会导致?
- 二维阵列的名称到底代表什么?
- 返回二维阵列
- 是二维阵列访问/修改时间组
- 如何创建一个具有空值、递减编号系统和.txt文件输入值的二维阵列网格
- 八个皇后二维阵列,带有gotos errror
- C++中的二维阵列
- 使用矢量创建二维阵列
- 编制二维阵列
- 错误:解除分配二维阵列
- 复制二维阵列C++
- 将二维阵列模拟为一维阵列
- 从具有两列的文件中加载二维阵列
- 可调整大小的动态二维阵列的更好解决方案
- 使用二维阵列用C++求解埃拉托色尼筛
- 如何显示非对角线二维阵列元素
- 嵌套阵列或嵌套二维阵列