お世話になっております。テラスと申します。
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の使い方が正しいのか
判断がつかないので、こちらで報告させて頂きます。