以前配列は宣言した範囲以外にアクセスしては行けないという話をしました。
では、なぜ配列外アクセスが駄目なのかでしょうか。
配列の要素を家にたとえるとわかりやすいです。
1部屋に1人しか住むことが出来ないとして、2部屋の家があったとします。
int 山田家[2];
この家に2人の山田さん夫婦が住んでいたとします。
山田家[0] = 夫;
山田家[1] = 妻;
しかし、そこに2人の山田さんの両親が一緒に住ませなければならない場合。
山田家[2] = 父;
山田家[3] = 母;
何が起こるか?
隣の家の田中さんの家に溢れ出てしまうのです。
山田家[0]
山田家[1]
山田家[2] | 田中家[0]
山田家[3] | 田中家[1]
しかも、達の悪いことに 田中家に住んでいる人を追い出して両親は住んでしまうのです。
では、このようなことをしてしまった後で、誰かが田中家に訪ねてきた場合どうなるでしょうか?
訪問( 田中家[0] );
この場合、田中家に訪ねてきたはずなのに、山田さんが出てきて
訪問者は混乱してしまいますよね。
更に最悪の事態としては、あふれた先に windows 等のシステムデータがあった場合です。
これはシステムを破壊する行為となり、フリーズなどを引き起こすことになります。
このような事にならないように、配列外にアクセスしてはいけないのです。