[解決済み] Catching c++ "Access Violation Writing Exception"?
質問
c++のコードで、ユーザー入力が無効な場合に "Access Violation Writing Location ..." Exception を発生させるコードブロックがあるのですが...。
この例外を try/catch ブロックでキャッチして、例外発生時にエラーメッセージを表示しようとしたのですが、なぜかエラーはキャッチされません。
try {
// ... some code that causes Access Violation Writing Location Exception
}
catch (...) {
std::cout << "invalid user input" << endl;
}
このようにしましたが、例外が発生したとき、コンソールには私のエラーメッセージは表示されず、"an "があると表示されます。
Unhandled exception at 0x0F0B0E9A (msvcr110d.dll) in Example.exe : Access violation writing location
ということは、私のtry/catchブロックは例外をキャッチしていないようだ...。
ブレークポイントを設定して、例外がtryブロックの中で発生していることを確認しました。
なぜ "catch (...)" はアクセス違反の例外をキャッチしないのですか?
解決方法は?
こんなことしちゃダメ
アクセス違反はC++の例外ではありません。オペレーティングシステムがアプリケーションを終了させようとするもので、何か不正なことをしたからです。
具体的には、アクセスする権限のないメモリ・アドレスに書き込もうとしたのです。これは基本的にランダムなメモリに書き込むということで、たとえ した このエラーをキャッチし、ユーザーに適切なエラーメッセージを表示しても、常にうまくいくとは限りません。時には、書き込み権限のないメモリに書き込む代わりに、プログラムの他の部分に書き込んでしまうこともあるかもしれません。この場合、アクセス違反は発生しないので、問題は検出されません。プログラムが壊れてしまうだけです。
その のみ これを行うには、ユーザーの入力を検証するのが正しい方法です。 あなたは は、ユーザー入力がプログラムで安全に処理できる形式であることをチェックしなければなりません。そうでない場合は、入力内容を修正するか、あるいは中止してユーザーにエラーを表示しなければなりません。これは自分のコードで行わなければなりません。 前に OSが強制的に終了させるような悪いことをするアプリケーションです。
はい、あります。 は アクセス違反を処理する方法がありますが、上で述べたように、それはあなたの問題に対する正しい解決策ではないので、それについて詳しく説明する理由はないと思います。
関連
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み] JUnit 4のテストで、ある例外が投げられたことをどのように断言しますか?
-
[解決済み] Pythonで例外を表示するには?
-
[解決済み】Exceptionを投げるとき、どの部分が高価なのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】coutはstdのメンバではない
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み】Visual Studio 2013および2015でC++コンパイラーエラーC2280「削除された関数を参照しようとした」が発生する
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み】'std::cout'への未定義の参照