创建一个二维数组,其中一个维度在编译时未知



我需要澄清两件事:二维数组和其长度在运行时确定的数组。第一个长度未知,第二个长度已知为2。

char** mapping = new char*[2];//2d array
mapping[2][0] = 'a';

这个程序崩溃,因为内存写入,没有分配给数组,我怎么能修复它?你能解释一下你的答案吗

如果只有第一个数组大小是运行时值(其余都是编译时值),那么您可以一次分配它。在您的示例中,对于运行时大小n

char (*mapping)[2] = new char[n][2];

"像往常一样"访问该数组,即mapping[i][j],其中i0..n-1范围内,j0..1范围内。

但是,除非您有一些特定的效率/布局要求,否则使用std::vector可能是更好的主意。

你需要写:

mapping[1] = new char(1);
mapping[1][0] = 'a';

2D数组中的每一行都应该单独初始化,索引从0开始,最大可用索引为1,但您尝试访问第三个1D数组

只要这样做,你所有的问题都会消失。

int size_x = 10, size_y = 20;
char* arr = new char[size_x*size_y];
char get(int x, int y) {
  return arr[x+y*size_x];
}
void set(int x, int y, char val) {
  arr[x+y*size_x]=val;
}

相关内容

  • 没有找到相关文章

最新更新