LoadSoundMem関数でmp3を読み込んだ後にAlt+F4でProcessMessageのループを抜けるとDxLib_End内でアクセス違反が"たまに"発生します。
体感的には5回に1回ぐらいですが、発生しないときはなかなか発生しません。
ESCAPEキー等によるループ終了では発生しない模様ですが、試行回数が十分とは言えません。
また、デバッグなしの実行においても発生せず、デバッグ実行時のみ事象の確認が出来ています。
環境かVS2008が悪いような気がしますが、原因や対策などご存知の方がいらっしゃいましたらご教授下さい。
再現の有無などの情報でも構いません。お手数とは思いますがよろしくお願いします。
当方の開発環境は、WinXP Pro SP3+VS2008EE+DxLib3.01↑です。
//-- 以下テストソース (n01.mp3を使用) --//
// "n01.mp3"は"SAM Free Music"さんのフリー素材をお借りしました。
// > ttp://sam-free.com/
// ダウンロードは、メニューの「音楽素材」から一番上の「N-01 春 ほのぼの MP3」から可能です。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode( TRUE );
if ( DxLib_Init( ) == -1 ) return -1;
SetDrawScreen( DX_SCREEN_BACK );
DrawFormatString( 0, 0, GetColor( 255, 255, 255 ), "ロード中" );
ScreenFlip( );
SetCreateSoundDataType( DX_SOUNDDATATYPE_FILE ); // データタイプは関係ない模様だが、ロードが短いので採用
//SetCreateSoundDataType( DX_SOUNDDATATYPE_MEMNOPRESS );
//SetCreateSoundDataType( DX_SOUNDDATATYPE_MEMPRESS );
int iSoundHandle1 = LoadSoundMem( "n01.mp3" ); // サイズの問題かエンコードの問題かは不明だがwavでは発生しない(しにくい?)
//int iSoundHandle2 = LoadSoundMem( "n01.mp3" ); // 読み込むファイルは1つでも発生するが、複数読み込んだほうが起こりやすい気がする
while ( ProcessMessage( ) == 0 ) // 事象はAlt+F4による終了で発生する模様
{
if ( CheckHitKey( KEY_INPUT_ESCAPE ) )
break; // ESCAPEキーによる終了では発生しない模様
ClearDrawScreen( );
DrawFormatString( 0, 0, GetColor( 255, 255, 255 ), "待機中 -- 終了してください --" );
ScreenFlip( );
}
//DeleteSoundMem( iSoundHandle2 ); // Deleteしても発生する模様
//DeleteSoundMem( iSoundHandle1 );
DxLib_End( );
return 0;
}