在函数内部创建2D动态数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在函数内部创建2D动态数组相关的知识,希望对你有一定的参考价值。

我知道类似的问题会出现几次,但我仍然无法找到这种情况。我想有一个功能,可以为进一步的操作创建数组。

in main:
    int *field;
    new_field(&field);

void new_field(int **field){    
   int **field = new int*[max_height];
   for (int i = 0; i < max_width; ++i)
      field[i] = new int[max_width];
}

“重新定义形式参数'字段'”出现了,但我也尝试了其他指针选项:/

答案

问题是你正在重新定义field函数中的new_field变量。只需删除重新定义。这就是,在int** field = ...函数中更改field = ...new_field

#define max_height 10
#define max_width 10

void new_field(int **field){    
    field = new int*[max_height];
    for (int i = 0; i < max_width; ++i)
        field[i] = new int[max_width];
}
int main(){
    int *field;
    new_field(&field);
}
另一答案

对于初学者,变量字段应具有int **类型。

在函数内部,您重新声明了name字段,编译器报告了这一点

void new_field(int **field){    
   int **field = new int*[max_height];
   //...

在循环中你必须使用max_height而不是max_width

   for (int i = 0; i < max_height; ++i)

您可以使用引用的类型作为参数。例如

int **field;
new_field( field );

//...

void new_field(int ** &field ){    
   field = new int*[max_height];

   for (int i = 0; i < max_height; ++i)
      field[i] = new int[max_width];
}

然而实际上该函数分配了几个一维数组。

如果变量max_width是编译时常量,那么你确实可以分配一个二维数组。例如

int ( *field }[max_width];
new_field( field );

//...

void new_field(int ( * &field )[max_width] ){    
   field = new int[max_height][max_width];
}

以上是关于在函数内部创建2D动态数组的主要内容,如果未能解决你的问题,请参考以下文章

访问动态 2D 字符数组时引发访问冲突异常

在android中动态创建选项卡并使用传入的参数加载片段

C ++在函数内部分配动态数组[关闭]

有没有办法使用相同的布局动态创建片段并向它们显示数据?

在 C++ 中的 2D 动态内存分配数组中释放分配的内存

如何在 glTexImage2D 中使用动态大小的纹理数组?