【C#】「インデックスが配列の境界外です(IndexOutOfRangeException)」エラーの原因を徹底解説!

スポンサーリンク

プログラミングを学んでいると、思いがけないエラーメッセージに出会うことがありますね。
その中でも

インデックスが配列の境界外です

というエラーは、C#を扱う上で非常に頻出かつ、初心者の方がつまずきやすい代表格のひとつです。

突然こんなメッセージが現れると、


「えっ?なんで?さっきまで動いてたのに…」

と、少し焦ってしまうこともあるでしょう。

しかしご安心を。
このエラーは、配列やループといった基本的な構造の理解を深めることで、しっかりと対処できるものです。

本記事では、エラーの原因を丁寧にひもときながら、よくあるミスとその解決方法を実例付きで解説してまいります。
基礎をおさえることで、コードを書くのがもっと楽しく、安心できるものになりますよ。

それでは、一緒に確認してまいりましょう。

エラーの内容とは?

まずは、「インデックスが配列の境界外です」というエラーがどのようなものなのかを確認しておきましょう。
C#でこのエラーが発生した場合、次のようなメッセージが表示されます。

System.IndexOutOfRangeException: インデックスが配列の境界外です。

これは、簡単に説明すると、「配列の範囲を超えた位置にアクセスしようとしていますよ」という警告です。

存在しない位置を指定されたから、拒否反応が出ちゃったんですね・・・

原因の仕組みを解説

このエラーが発生する原因は、インデックスの指定ミスにあります。
C#の配列は、0から始まるという点が特徴です。

たとえば、以下のように配列を宣言した場合、

int[] numbers = new int[3];

この numbers 配列に存在するのは、インデックス 0, 1, 23つです。
3 は存在しません。

ところが、次のように書いてしまうとどうなるでしょう?

numbers[3] = 10;

このとき、配列の範囲を超えてアクセスしてしまっているため、例のエラーが発生してしまうのです。

「Length – 1」までしか使えないという法則を、ぜひこの機会にしっかりと覚えておきましょうね。

よくあるケース別の原因と対策

ケース1:ループ処理でのミス

for (int i = 0; i <= array.Length; i++) {
    Console.WriteLine(array[i]);
}

このコード、一見すると正しそうですが、実は i <= array.Length の部分が問題です。
この条件では、iarray.Length と等しくなる瞬間が訪れ、そのときに配列の境界外にアクセスしてしまうのです。

正解はこちら

for (int i = 0; i < array.Length; i++) {
    Console.WriteLine(array[i]);
}

< を使うことで、適切な範囲内でループが終わるようになります。

ケース2:空の配列にアクセスしてしまう

int[] values = new int[0];
Console.WriteLine(values[0]); // ← エラー発生

この場合、配列 values は確かに宣言されていますが、中身はひとつも存在していません。
つまり、インデックス 0 すら存在しない状態です。

対策としては、値を追加してからアクセスするか、サイズを指定して初期化する必要があります。

ケース3:ユーザーの入力値をそのまま使ってしまう

int index = int.Parse(Console.ReadLine());
Console.WriteLine(array[index]); // 入力値によってはエラーに

このコードでは、ユーザーの入力次第で IndexOutOfRangeException が発生する可能性があります。
このような場合には、事前に範囲チェックを行うようにしましょう。

if (index >= 0 && index < array.Length) {
    Console.WriteLine(array[index]);
} else {
    Console.WriteLine("インデックスが範囲外です。");
}

まとめ

  • インデックスは 0から始まり、「Length – 1」まで が有効範囲です。
  • ループ処理やユーザー入力などで 範囲を確認することが重要です。
  • 焦らず、エラーメッセージとコードの内容を 一歩ずつ丁寧に確認しましょう。

エラーというのは、学びの入り口に過ぎません。
一度つまずいても、それは成長のチャンスです。

C#
スポンサーリンク
なんくるをフォローする

コメント

タイトルとURLをコピーしました