なにが恐いの?
配列は配列要素が連続しており、実際の記憶もメモリー上に連続して行われます。
標準的な基本的に C 言語は、 配列要素の数の上限(下限)のチェックをしません(情報が保護されない)。
このため、配列の使い方が誤っていると、変数・プログラムが破壊されて正しく動作しなくなる可能性があります。よって、配列の宣言・使用は慎重に行う必要があります。
チェックをしない理由はいろいろ考えられますが、
・チェックをするとプログラムが遅くなる(C言語が生まれた当時は、計算機の能力がまだ低く、致命的でした)
・そのような制限を設けるとトリッキーなプログラム手法が使えなくなる(システム記述には必要?)
・C言語の他の部分(たとえばポインタ変数)との関係のため
などでしょうか。この特徴は、教育用に使用する言語としては少々辛いところです。
考察) 上記のように誤った使い方をするとどんなことが起きると考えられますか?
→ バッファーオーバーラン(バッファーオーバーフロー), NXビット
もっともプログラミングの授業では、プログラムが破壊されたとしても、エラーによって人が死ぬようなことはないわけで、どちらかというとプログラムミスの発見・修正が面倒になるという程度か・・・!?
Kunihiro Egami <egami@egamix.com>