« メイド服のカーネルサンダース♪ | トップページ | 幕末浮世絵展 »

2008年5月 3日 (土)

正体不明な不具合…それはマルチスレッド!?

何か変な所ではねる…。
今まで問題なく動作していたのでさらに分からん!

ってプログラムの話ですが…。

しかもPCによって出たり出なかったり…。

謎です…。

しかし、頻繁に発生する不具合でしかも落ちる!
な訳で放っておけません。

コールスタックを見るとこんな所で跳ねてます。

NTDLL! 77f9193c() << ※
NTDLL! 77f9c73e()
NTDLL! 77fb064e()
NTDLL! 77f9bd5a()
NTDLL! 77fcb63e()
_heap_alloc_base(unsigned int 0x00000060) line 200
_heap_alloc_dbg(unsigned int 0x00000034, int 0x00000001, const char * 0x00000000, int 0x00000000) line 378 + 9 bytes
_nh_malloc_dbg(unsigned int 0x00000034, int 0x00000000, int 0x00000001, const char * 0x00000000, int 0x00000000) line 248 + 21 bytes
_malloc_dbg(unsigned int 0x00000034, int 0x00000001, const char * 0x00000000, int 0x00000000) line 165 + 27 bytes
_calloc_dbg(unsigned int 0x00000001, unsigned int 0x00000034, int 0x00000001, const char * 0x00000000, int 0x00000000) line 506 + 21 bytes
calloc(unsigned int 0x00000001, unsigned int 0x00000034) line 457 + 19 bytes

通常、開放時にエラーが発生する場合には確保した
メモリーの前後を破壊している場合が多いのですが…
そうでもなさそうで…
良く分からん!

アウトプットウインドウには…

HEAP[test.exe]: HEAP: Free Heap block 413ada8 modified at 413adb8 after it was freed
例外処理 (初回) は test.exe (NTDLL.DLL) にあります: 0xC0000005: Access Violation。
例外処理 (初回) は test.exe にあります: 0xC0000005: Access Violation。

…慣れた人ならここで「ああ…」などと言うかもしれません…。

慣れたと言うよりは、苦労されたと言った方が確かかもしれません…。

しかし、原因不明で悩まされました…。

このエラーが発生している場所は、サウンドでスレッド処理している所です。
ある程度、排他処理などをしていたり関連処理は全てスレッド内で行うなど
相応の処理をしているはずなのですがメモリー確保と開放内でエラーとは…。

そんな時に『ハタ!』とある事を思い出しました。

あるプログラマーさんが
『マルチスレッドにしなきゃ駄目だよ!』
と…。

毎回、プロジェクトを作り直しているのですが
マルチスレッド設定は、し忘れていた…。

試しに使用するランタイムライブラリの設定を
シングルスレッドからマルチスレッドに変えてみました。

…エラーが発生しなくなりました…。

ぎゃあ~!こんな所で食らうのか!

勉強になりました。(汗)

そうそう、発生するPCの差も2CPUか1CPUでした…。

割り込みは、怖いです…。((;゜Д゜)))ガクブル

|

« メイド服のカーネルサンダース♪ | トップページ | 幕末浮世絵展 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 正体不明な不具合…それはマルチスレッド!?:

« メイド服のカーネルサンダース♪ | トップページ | 幕末浮世絵展 »