我需要澄清两件事:二维数组和一个长度在运行时确定的数组。第一个长度未知,第二个已知为二。
char** mapping = new char*[2];//2d array
mapping[2][0] = 'a';
该程序由于写入未分配给数组的内存而崩溃,我该如何解决?你能解释一下你的答案吗?
我需要澄清两件事:二维数组和一个长度在运行时确定的数组。第一个长度未知,第二个已知为二。
char** mapping = new char*[2];//2d array
mapping[2][0] = 'a';
该程序由于写入未分配给数组的内存而崩溃,我该如何解决?你能解释一下你的答案吗?
如果只有第一个数组大小是运行时值(其余的是编译时值),那么您可以一次性分配它。在您的情况下,对于运行时大小n
char (*mapping)[2] = new char[n][2];
“像往常一样”访问这个数组,即 as mapping[i][j]
,其中i
在0..n-1
范围内并且j
在0..1
范围内。
但是,除非您有一些特定的效率/布局要求,否则使用std::vector
.
你需要写:
mapping[1] = new char(1);
mapping[1][0] = 'a';
二维数组中的每一行都应单独初始化,索引从 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;
}