C ランタイム エラー:「引数が無効です」を解決するにはどうすればよいですか?
C でプログラムを作成すると、さまざまなエラーが発生することがよくあります。一般的なエラーの 1 つは、実行時エラー「引数が無効です」です。このエラーは通常、関数またはメソッドに渡したパラメーターの 1 つが期待を満たしておらず、プログラムが正しい操作を実行できなかったことを意味します。
それでは、このエラーが発生した場合、どのように解決すればよいでしょうか?以下にコード例を示して説明します。
まず、次のサンプル コードを考えてみましょう:
#include <iostream> #include <vector> int main() { std::vector<int> nums = {1, 2, 3, 4, 5}; int index = 10; int result = nums.at(index); // 这里可能会引发运行时错误 std::cout << "Result: " << result << std::endl; return 0; }
この例では、std::vector
コンテナを使用して、いくつかの整数を格納し、渡そうとしています。インデックスによってそれらを要素の 1 つにアクセスします。ただし、コンテナのスコープ外のインデックス (10
) を使用しているため、実行時エラーが発生する可能性があります。
このコードを実行すると、次のような出力が表示される場合があります。
terminate called after throwing an instance of 'std::out_of_range' what(): vector::_M_range_check: __n (which is 10) >= this->size() (which is 5)
これは、典型的な「引数が無効です」ランタイム エラーです。では、どうやって解決すればいいのでしょうか?
この問題を解決する 1 つの方法は、コンテナ要素にアクセスする前に境界チェックを実行することです。 std::vector
が提供するメンバー関数 size()
を使用して、コンテナーに格納されている要素の数を取得し、それをアクセスするインデックスと比較して、インデックスが有効な範囲内にあることを確認します。
次は、変更されたコードの例です:
#include <iostream> #include <vector> int main() { std::vector<int> nums = {1, 2, 3, 4, 5}; int index = 10; if (index >= 0 && index < nums.size()) { int result = nums.at(index); std::cout << "Result: " << result << std::endl; } else { std::cout << "Invalid index" << std::endl; } return 0; }
変更されたコードでは、インデックスの有効性をチェックするための if
ステートメントを追加しました。アクセス操作は、インデックスが範囲内にある場合にのみ実行されます。それ以外の場合は、「インデックスが無効です」というメッセージが出力されます。
このようにして、「引数が無効です」という実行時エラーを回避できます。 std::vector
などのコンテナを使用する場合は、境界チェックを実行して、インデックスがコンテナの有効範囲を超えていないことを確認する必要があります。
もちろん、実際のプログラミングでは、他のさまざまな状況で「引数が無効です」エラーに遭遇することもあります。たとえば、関数に無効なポインタや参照を渡したり、関数呼び出し時に不適切なパラメータを指定したりする場合などです。これらの状況に応じて解決策も異なります。
要約すると、C ランタイム エラー「引数が無効です」が発生した場合は、まずパラメーターの有効性をチェックして、関数またはメソッドの期待を満たしていることを確認する必要があります。必要に応じて、境界チェックや入力検証などの安全策を追加して、この種のエラーを回避します。
上記のサンプル コードとメソッドを通じて、読者が C ランタイム エラー「無効な引数」をよりよく理解して解決し、プログラムの堅牢性と安定性を向上できることを願っています。
以上がC++ ランタイム エラー:「引数が無効です」を解決する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。