C ランタイム エラー:「範囲外」を解決するにはどうすればよいですか?
C プログラミングでは、配列、コンテナー、文字列などのデータ構造を使用すると、よくある実行時エラー、つまり「範囲外」が発生します。このエラーは通常、有効なインデックス範囲外の要素にアクセスすると発生します。この記事では、この問題をよりよく理解して解決するために、いくつかの一般的な原因と解決策について説明します。
#include#include int main() { std::vector numbers = {1, 2, 3}; // 错误示例:访问超过容器范围的索引 int index = 3; std::cout << numbers[index] << std::endl; return 0; }
上の例では、3 つの要素を含むベクター コンテナを定義し、インデックス 3 の要素にアクセスしようとしました。コンテナには要素が 3 つしかないため、有効なインデックス範囲は 0 ~ 2 です。そのため、インデックス 3 の要素にアクセスすると有効な範囲を超え、「範囲外」エラーが発生します。
このエラーを回避するには、インデックスが有効な範囲内にあることを常に確認する必要があります。条件判断を使用してインデックスが有効かどうかを確認することも、イテレータを使用してコンテナ要素を走査することもできます。
#include#include int main() { std::vector numbers = {1, 2, 3}; // 错误示例:索引计算错误 for(int i = 0; i <= numbers.size(); i++) { std::cout << numbers[i] << std::endl; } return 0; }
上の例では、間違ったインデックス計算方法を使用しました。ループ内では、条件i <=numbers.size()
を使用して、ループが実行を継続するかどうかを判断します。インデックスは 0 からカウントを開始し、numbers.size()
は要素の数を返すため、条件はi
このエラーを回避するには、インデックスの計算方法を注意深くチェックして、計算結果が正しく、有効範囲を超えていないことを確認する必要があります。
#include#include int main() { std::string str = "Hello"; // 错误示例:字符串操作错误 std::cout << str.substr(0, 10) << std::endl; return 0; }
上の例では、文字列のsubstr()
関数を使用して部分文字列を取得しました。ただし、インターセプト範囲が元の文字列の長さを超えているため、「範囲外」エラーが発生します。
このエラーを回避するには、文字列操作のパラメータが正しい範囲内にあることを常に確認する必要があります。length()
関数を使用して文字列の長さを取得し、対応する操作を実行できます。
「範囲外」エラーのトラブルシューティングを行う場合、最も重要なことは、コードを再チェックして、インデックスの計算と操作の両方が有効な範囲内にあることを確認することです。さらに、デバッグ ツールやテクニックを使用することも、問題を見つけて特定する効果的な方法です。これらの一般的なエラーの原因と解決策を理解することで、C の「範囲外」エラーをより適切に回避および解決し、プログラムの安定性と信頼性を向上させることができます。
以上がC++ ランタイム エラー:「範囲外」を解決する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。