C言語 配列オーバーの動き
C言語改訂版1 はじめてのプログラミング (CD-ROM付) (プログラミング学習シリーズ)
- 作者: 倉薫
- 出版社/メーカー: 翔泳社
- 発売日: 2009/02/13
- メディア: 大型本
- 購入: 3人 クリック: 14回
- この商品を含むブログ (3件) を見る
プロがおっしゃるに、C言語では以下のような事象があるとのこと。
- C言語のプログラムのバグの半分以上は配列の添え字が大きいことに起因する
#include <stdio.h>
main () {
int days[12] =
{
31,28,31,30,31,30,
31,31,30,31,30,31
} ;
int i;
for (i = 1; i <= 12; i++) {
printf("%d月は、%d日まであります。\n", i, days[i-1]);
}
}
上記ではdays[12]を定義しているが、成分名はdays[0], days[1], …のように0から開始する。当然days[12]はない。days[12]にアクセスしようとすると(これを著者は"配列オーバー"という)、どうなるかは「わからない」とのこと。これは、C言語が配列オーバーのときにどのような動作をするかを、規定していないからだそう。固まって動かなくなることもあるらしい。
(恐ろしいのでメモ…)