トップページ > 過去ログ > 記事閲覧
LoadSoundMem使用後にAlt+F4でアクセス違反が
名前:いっち 日時: 2010/02/15 12:57

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; }

Page: 1 |

Re: LoadSoundMem使用後にAlt+F4でアクセス違反が ( No.1 )
名前:管理人 日時:2010/02/22 01:18

ご報告ありがとうございます 20回ほど試してみましたが、エラーは発生しませんでした mp3 以外の形式でも発生するのでしょうか? 現時点では推測でしかありませんが、もし mp3 でしか発生しないということでしたら mp3 はPCにインストールされているコーデックに頼ってデコードしていますので DXライブラリとインストールされているコーデックの相性が悪いことが原因である可能性もあります
Re: LoadSoundMem使用後にAlt+F4でアクセス違反が ( No.2 )
名前:いっち 日時:2010/02/22 19:39

環境依存ということで了解しました。 言われてみればデコーダの事を気にしたことがありませんでした。 自分なりに調べてみようと思います。 ありがとうございました。

Page: 1 |