1

malloc配列へのポインターの配列を作成するには、構文は次のようにする必要があることを知っています。

(int**)malloc(numberOfDesiredElements*sizeof(int*))

numberOfDesiredElements*うっかり、サイズの前にを入れ忘れました。ランダムなセグメンテーション違反をスローしてプログラムを台無しにしていました。つまり、プログラムが正しく出力されることもあれば、セグメント違反が発生することもありました。

必要なスロット数を示さなかったときに何が起こったのか、誰か説明できますか?

ありがとう!

4

2 に答える 2

5

これは普通の乗算であり、魔法の構文ではありません。そのため、3 ではなく 1 にスペースを割り当てました。

于 2012-04-15T09:07:02.623 に答える
3

それを書くより良い方法は

int **p = malloc(numberOfDesiredElements * sizeof *p);

よりクリーンで読みやすくなり、式でタイプをまっすぐに保つことを心配する必要がなくなりましたsizeof。キャストは不要です (C では必要です。C++ では必要ですが、C++ では使用しないでください) 。スコープ内 mallocにプロトタイプがない場合は、有用な診断を抑制することができます。malloc

意図したよりも少ないスペースを割り当てたときに何が起こったかについては、まあ、定義された動作の境界を超えました. 重要なものを破壊すると、実行時エラーが発生します。そうしないと、コードは正しく動作している ように見えます。

于 2012-04-15T13:53:44.253 に答える