正体不明な不具合…それはマルチスレッド!?
何か変な所ではねる…。
今まで問題なく動作していたのでさらに分からん!
ってプログラムの話ですが…。
しかも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でした…。
割り込みは、怖いです…。((;゜Д゜)))ガクブル
| 固定リンク
コメント