トップページ > 過去ログ > 記事閲覧
非同期で読み込んだ画像を消そうとするとアクセス違反
名前:テラス 日時: 2012/04/03 02:03

お世話になっております。テラスと申します。 SetUseASyncLoadFlagを使用し、LoadGraphなどで読み込んだ画像を DeleteGraphなどで解放しようとするとアクセス違反が発生し、プログラムが強制終了します。 使用しているツールは「Visual Studio 2010」、DXライブラリのバージョンは3.07dです。 デバッグモードで実行しても再現されず、デバッグ無しで開始か、実行ファイルを直接実行すると症状が出ます。 更に、画像の横縦サイズが2のn乗のもの、 もしくはウィンドウサイズと同じもの(640×480)では再現しませんでした。 私が試した限り、Win7(32bit,64bit両方)で再現するようです。 Vistaでは確認していませんが、XPでは再現しません。 また、7のXP SP3互換で実行しても再現しませんでした。 再現コードです。 int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int ) { if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK ) return 1 ; if( DxLib_Init() == -1 ) return 1 ; int flag = 0; int GHandle[128]; while( ProcessMessage() == 0 ) { switch( flag ) { case 0: SetUseASyncLoadFlag( TRUE ) ; for(int i=0; i<128; i++) { GHandle[i] = LoadGraph( "test.png" ) ; } SetUseASyncLoadFlag( FALSE ) ; flag = 1; break; case 1: if( GetASyncLoadNum() == 0 ) { flag = 2; } break; case 2: for(int i=0; i<128; i++) { DeleteGraph( GHandle[i] ) ; //ここでアクセス違反 } flag = 0; break; } if( CheckHitKeyAll() != 0 ) break; Sleep( 16 ); } DxLib_End(); return 0; } LoadGraphの他にLoadDivGraph、DeleteGraphの他にDeleteSharingGraphやInitGraphでも同じ症状が出ました。 雑談&質問掲示板に報告しようかとも思ったのですが、SetUseASyncLoadFlagの使い方が正しいのか 判断がつかないので、こちらで報告させて頂きます。

Page: 1 |

Re: 非同期で読み込んだ画像を消そうとするとアクセス違反 ( No.1 )
名前:管理人 日時:2012/04/09 02:32

ご報告ありがとうございます 手元の Windows7 64bit 環境で現象が再現しました グラフィックハンドルのセットアップ処理中にあるマルチスレッド処理用に他スレッドからの アクセスを制限するタイミングに誤りがあり、それがエラーの原因となっていました 修正版をアップしましたので、よろしければお試しください m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) // ビューアー http://homepage2.nifty.com/natupaji/DxLib/DxLibModelViewerTest.zip
Re: 非同期で読み込んだ画像を消そうとするとアクセス違反 ( No.2 )
名前:テラス(解決) 日時:2012/04/11 21:44

修正版でエラーが発生しなくなりました。 対応ありがとうございました。

Page: 1 |