2017-03-21 3 views
0

私は常に、違反しているプログラムがクラッシュする可能性があることを常に理解しています。誰かが、Windowsでは必ずしもそうではないということを教えてくれました。そうですか?それとも、私はそう思ったように、すぐにクラッシュするのだろうか?Windows C++プログラムのアクセス違反がすぐにクラッシュすることはありますか?

+0

[Windowsでのアクセス違反のキャッチ](0120-998-003) – AndyG

+2

プログラムによって割り当てられていないメモリへのアクセスは未定義です動作。未定義の動作は未定義です。何かが起こる可能性があります。 –

+1

'プログラムはすぐにクラッシュする'これは真実ではない。カーネルモードは例外を処理します。まず、デバッガが接続されている場合は、デバッガに例外を処理してもらうようにしてください。デバッガが処理しない(または接続されていない)場合、例外は 'KiUserExecptionDispatcher'を介してアプリケーションに渡されます。アプリケーションはVEHまたはSEH経由でそれを処理できます。それでも処理されない場合、例外は最後のチャンスとしてデバッガに(添付されていれば)送信されます。まだ処理されていない場合 - 例外ポート送信を処理します。処理されていない場合 - 処理が終了しました – RbMm

答えて

0

アクセス違反が強制クラッシュを引き起こすプロセッサーについてはわかりません。

アクセス違反は常にフォールト(トラップではありません)です。オペレーティングシステムは、プロセスが障害を修正できるようにする例外ハンドラ(割り込みベクタから呼び出される)を設定できるようにすることができます。

-1

いいえ、そうした場合、敵がバッファオーバーランでできる最悪のことはサービス拒否になります。

特定の例では、それが真でないWindowsの1つのバージョンはWindows 95で、そのメモリモデルは「危険なメモリモデル」というニックネームが付けられています。そのプラットフォーム上のすべてのWin32プログラムは、DOS、32ビットプログラム、16ビットプログラム、カーネルとドライバ用に予約されたメモリ領域の領域と、メモリの下位部分(NULLポインタ参照)実際にプログラムをクラッシュさせます。

関連する問題