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;