2

次のように、Cで多次元配列を宣言しました。

int arr[4][2];
int length = 0;

しかし、私はどうやら私が望むだけ多くの要素を追加することができます:

void addStuff(){
    arr[length][0] = someVal;
    arr[length++][1] = someVal;
}

エラーは発生しません。これは、私が無人地帯のどこかで私の記憶を破壊していることを意味しますか?それとも、これはCIのいくつかの機能が知らないのですか?

4

3 に答える 3

9

配列サイズを超えて割り当てると、間違いなくどこかでメモリが破損しています。プログラムがセグメンテーション違反を起こしたり、他のデータが破損したり、(誤って)正しく動作したりする可能性があります。Cではデフォルトで境界チェックはありません。

于 2012-06-15T14:31:39.233 に答える
2

あなたは間違いなくいくつかのメモリを破壊しています。プログラムの実行中に「未定義動作」と呼ばれるすばらしいエラーが発生します。

Cでは、アウトオブバウンド配列書き込みが発生しないようにするのはプログラマーとしてのあなたの責任です。

于 2012-06-15T14:32:40.480 に答える
1

Cには配列境界チェックがありません。そうです、あなたはどこかで記憶を操作しています。運が良ければ、すぐにプログラムがクラッシュします。運が悪ければ、いくつかの有効なデータを操作しているため、しばらくしてクラッシュが発生したり、プログラムが以前と同じように動作したり、ハードディスクがフォーマットされたりします。

于 2012-06-15T14:33:07.373 に答える