2

誰かが書いた 2 行のコードを見ていますが、2 行目に例外がありますが、その理由がわかりません。

char** array = (char**) new char [2] [6];

std_strlprintf(array[0],6,"[%d]", num);

std_strlprintf は、書式設定された出力を文字列に書き込む Brew 関数です。(num は 0 の整数値です)

このコードに例外があるのはなぜですか?配列の最初の要素に buff[0] としてアクセスすることの何が問題なのですか?


編集:申し訳ありませんが、最初の投稿にタイプミスがありました。現在修正されています。これは例外のあるコードです。

4

1 に答える 1

6

2 次元配列は、ポインターの配列と同じではありません。

最初のステートメントは、それぞれが 6 文字の 2 つの配列を 1つのメモリ ブロックとして作成します。そのステートメントを次のように置き換えます。

char (*array)[6] = new char [2][6];

2 番目のステートメントで準備完了です。忘れないで

delete [] array;

編集 0:

ええ、私は知っていたはずです:)コメントのあなたの質問に:

char**その後、パラメーターとして aを受け取る関数に配列を渡すにはどうすればよいですか?

あなたはそうしない。この形ではありません。のような C API のパラメーターのリストを作成する場合はexecve(2)、2 段階の初期化を行う必要があります。

// prototype of the function to call
void my_fancy_func( int argc, char* const argv[] );

char** my_argv = new char*[my_argc];

for ( i = 0; i < my_argc; i++ ) {
    my_argv[i] = new char[arg_buffer_size];
    snprintf( my_argv[i], arg_buffer_size, "%d", i );
}

my_fancy_func( my_argc, my_argv );
于 2011-03-22T21:24:31.280 に答える