与えられたユーザー入力が無効な場合に例外が発生するコードを書きましたので、try/catchブロックに入れましたが、まだ例外がスローされました。コード自体はかなり長いので、ここでは例外に遭遇するコードの簡略版があります。例外自体は明確で、位置 "3"は存在しないので自然に例外がスローされますが、try/catchブロックの内側にあるため捕捉されるはずですが、そうではありません。コードがtry/catchブロック内にあっても例外が発生する
int main() {
try
{
vector<string> test = vector<string>{ "a","b","c" };
string value = test[3];
}
catch (...)
{
}
}
このコードを実行すると、try/catchブロック内にあるかどうかにかかわらず、次の例外が発生します。
私も例外(const out_of_range&e
)を指定しようとしたが、それはどちらかの助けにはなりませんでした。ちょうど同じ例外が発生しました。
int main() {
try
{
vector<string> test = vector<string>{ "a","b","c" };
string value = test[3];
}
catch (const out_of_range&e)
{
}
}
私はVisual Studioを使用していますが、これはIDEまたはそれが使用するコンパイラで問題になる可能性がありますか?
エレメント3は、あなたのベクトルのメンバーではありません。代わりに2を使用してください。 – Raindrop7
さまざまなタイプの例外*コンピュータシステムがあります。ソフトウェア、オペレーティングシステム、またはハードウェアのエラーによって引き起こされるものではなく、C++自体からスローされたものだけを捕捉することができます。あなたが[あなたのプログラムをデバッグする方法を学ぶ]ようなクラッシュ(https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。 –
あなたのクラッシュ*の背後にある理由としては、あなたの[初心者の本](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)に戻ってそれらを見直すべきです。 –