2016-05-20 4 views
-1

に大きなインデックスにアクセスすることができますなぜ私は三つの要素のint配列を宣言していますが、私は、私は私はC

int x[3]; 
int length = sizeof(x)/sizeof(x[0]); 
x[10] = 2000; 
printf("\n the length defined is %i but I can still setting and getting other indexes like index 10", length); 
printf("\n The value of the element eleven is: %i", x[10]); 
+0

おそらく[この質問](https://stackoverflow.com/questions/37309076)が役立ちます。 – user3386109

答えて

0

配列の長さよりも大きいインデックスにアクセスし、より大きな配列インデックスにアクセスできることに注意してくださいあなたが実際にやっていることは、あなたがアクセスするはずのないメモリ領域に "侵入する"ことです。これにより、アプリケーションの予期しない動作やクラッシュが発生する可能性があります。

+0

私はそれを理解していますが、なぜそれが可能なのか分かりませんか? –

+0

配列サイズの宣言は、割り当てられるメモリ量です。しかし、割り当てられたメモリにアクセスするときは、メモリ領域のどこに読み書きするかを制御するのは開発者次第です。コンパイラは、開発者が正当なメモリ領域にアクセスしているかどうかをチェックしません。 –

1

Cを高速化することの1つは、配列の境界チェックを実行しないことです。プログラマーは、適切な範囲内にとどまるために何をしているのかを知ることを期待しています。

このようにしないと、アレイの境界外にあるメモリの一部にアクセスし、undefined behaviorにつながります。