[Development][Win32API] EXCEPTION_ACCESS_VIOLATION(0xC0000005)
前回、ヒープ破壊()の例外コードを取り上げたところ拍手がついていたので、Windowsシステム例外コードを取り上げていくのもいいかな、と思い始めたところ。
EXCEPTION_ACCESS_VIOLATION は、プログラムを始めたばかりの人間とか、C/C++でコツコツとケチなバッファを操作しようとセコい考えをしているとよくぶち当たる問題で、大抵が質の低いプログラムについてまわる、非常にありがちな例外。
C言語で言うところのchar型配列で、範囲外のところにstrcat()か何かでデータを書き込もうとすると発生する、いわゆるアクセス違反。市販のソフトウェアでも、ときどきクラッシュしてデータをふっ飛ばしてしまうバグが発生した時に出てくるダイアログを見てみると、この0xC0000005が記録されていることが多い。
ところで、Win32APIを使ったプログラミングをしていると、そのうち必ず使いたくなってくるであろう(?)機能として、クリティカルセクションがある。
クリティカルセクションというのは、一言で言うとロック機構のことであるが、このクリティカルセクションのオブジェクトを解放したあとにロック/アンロックを呼び出そうとすると 0xC0000005 が発生する。
非常に厳しいタイミングでトランザクションの終了処理と排他制御処理が重なった時に、まれにこの現象が発生することがある。
排他制御の対象となっているオブジェクト自体はクリティカルセクションでがっちりとガードできていても、当のクリティカルセクションオブジェクト自体はガードされているわけではないという笑えない話。
theme : プログラミング
genre : コンピュータ
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|





