0

2 つのことについて明確にする必要があります。2 次元配列と、長さが実行時に決定される配列です。最初の長さは不明ですが、2 番目の長さは 2 であることがわかっています。

char** mapping = new char*[2];//2d array
mapping[2][0] = 'a';

このプログラムは、書き込まれているメモリが配列に割り当てられていないためにクラッシュします。どうすれば修正できますか? あなたの答えを説明してください。

4

3 に答える 3

2

配列サイズの最初のみが実行時の値である場合 (残りはコンパイル時の値)、一度に割り当てることができます。あなたの場合、実行時のサイズについてn

char (*mapping)[2] = new char[n][2];

この配列に「通常どおり」、つまり としてアクセスします。mapping[i][j]ここiで、 は0..n-1範囲内にあり、j0..1範囲内にあります。

ただし、特定の効率/レイアウト要件がない限り、 を使用することをお勧めしますstd::vector

于 2013-05-09T07:09:12.280 に答える