[Development][Win32API] EXCEPTION_ACCESS_VIOLATION(0xC0000005)

 前回、ヒープ破壊()の例外コードを取り上げたところ拍手がついていたので、Windowsシステム例外コードを取り上げていくのもいいかな、と思い始めたところ。

 EXCEPTION_ACCESS_VIOLATION は、プログラムを始めたばかりの人間とか、C/C++でコツコツとケチなバッファを操作しようとセコい考えをしているとよくぶち当たる問題で、大抵が質の低いプログラムについてまわる、非常にありがちな例外。

 C言語で言うところのchar型配列で、範囲外のところにstrcat()か何かでデータを書き込もうとすると発生する、いわゆるアクセス違反。市販のソフトウェアでも、ときどきクラッシュしてデータをふっ飛ばしてしまうバグが発生した時に出てくるダイアログを見てみると、この0xC0000005が記録されていることが多い。

 ところで、Win32APIを使ったプログラミングをしていると、そのうち必ず使いたくなってくるであろう(?)機能として、クリティカルセクションがある。
 クリティカルセクションというのは、一言で言うとロック機構のことであるが、このクリティカルセクションのオブジェクトを解放したあとにロック/アンロックを呼び出そうとすると 0xC0000005 が発生する。

 非常に厳しいタイミングでトランザクションの終了処理と排他制御処理が重なった時に、まれにこの現象が発生することがある。
 排他制御の対象となっているオブジェクト自体はクリティカルセクションでがっちりとガードできていても、当のクリティカルセクションオブジェクト自体はガードされているわけではないという笑えない話。

theme : プログラミング
genre : コンピュータ

FC2ブックマーク | この記事をokyuuへインポート | このエントリーを含むはてなブックマーク | ニフティクリップへ追加 | この記事をクリップ! | イザ!ブックマーク | POOKMARK Airlinesに登録する | del.icio.us |
動作未検証 | | 動作未検証 | 動作未検証 | 動作未検証 | 動作未検証 | 動作未検証 | 動作未検証 | 動作未検証 | 動作未検証 | 動作未検証 | 動作未検証

comment

管理者にだけメッセージを送る

カレンダー
01 | 2010/02 | 03
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 - - - - - -
最近の記事
月別アーカイブ
カテゴリー
ブログ内検索
RSSフィード
リンク
いろいろリンクボタン
購入したものなど
埋め込みe-Words