繁体   English   中英

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

[英]Creating a 2d array, one dimension not known at compile time

我需要澄清两件事:二维数组和长度在运行时确定的数组。 第一个长度未知,第二个已知为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,但是您尝试访问第3个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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM