[C++] new による多次元配列の動的作成

Saturday, January 14, 2012

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;

コメントを残す

メールアドレスが公開されることはありません。

one + sixteen =