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

时间:2013-05-09 07:05:52

标签: c++ multidimensional-array

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

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

由于写入的内存未分配给阵列,此程序崩溃,我该如何解决?你能否解释一下你的答案。

3 个答案:

答案 0 :(得分:2)

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

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

像往常一样访问此数组,即mapping[i][j],其中i位于0..n-1范围内且j位于0..1范围内。

但是,除非您有一些特定的效率/布局要求,否则最好使用std::vector

答案 1 :(得分:0)

你需要写:

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

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

答案 2 :(得分:-1)

就这样做,所有问题都将消失:

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;
}