2 次元配列を作ろうとして double **arr = new double[size_x][size_y]; とか書いたらコンパイラに怒られたのでメモ。
1 次元配列
double *array = new double[size_x]; delete[] array;
2 次元配列
ダメな例
double **array = new double[size_x][size_y]; // これはダメ
new により確保できる配列は 1 次元までなので,次のように 1 次元ずつ確保していく必要があります。delete による解放も同様に 1 次元ずつ行います。
正しい例
double **array = new double*[size_x];
for (int i = 0; i < size_x; i++) {
array[i] = new double[size_y];
}
for (int i = 0; i < size_x; i++) {
delete[] array[i];
}
delete[] array;
3 次元配列
3 次元以上の配列でも同じ手法で解決できます。
ダメな例
double ***array = new double[size_x][size_y][size_z]; // ダメ
正しい例
double ***array = new double**[size_x];
for (int i = 0; i < size_x; i++) {
array[i] = new double*[size_y];
for (int j = 0; j < size_y; j++) {
array[i][j] = new double[size_z];
}
}
for (int i = 0; i < size_x; i++) {
for (int j = 0; j < size_y; j++) {
delete[] array[i][j];
}
delete[] array[i];
}
delete[] array;