トップページ > 記事閲覧
CreateGraphFromMemで特定のPNGファイルを読込するとまれに強制終了します
名前:SmokingWOLF 日時: 2022/12/03 11:14

いつもDXライブラリに大変お世話になっております。 CreateGraphFromMemで特定のPNGファイルを複数読込したとき、 まれに強制終了する現象を確認しましたのでご報告します。 使用させていただいたDXライブラリはバージョン「3.24」です。 環境依存かもしれませんが、以下の再現ソースで作成したexeを何度も実行し直すと、 10〜20回に1度くらいの頻度でアクセス違反で強制終了するようです。 その際、呼び出し履歴を見ると「LoadPngImage_Fast」という関数でアクセス違反が発生しているようでした。 よければ一度ご確認いただけますと幸いです。 ※VisualStudio Community 2022でコンパイルし、Debug、Release版どちらでも再現しました。 ※Windows SDKのgflagsを使って「gflags.exe /p /enable D:\(絶対パス)\Test.exe /full /tracedb 24」  (Test.exe=作成したEXE)と実行すると「icon100.png」の読み込みで確実にエラーが再現できました。 <再現に使用したPNGファイル> [---削除させていただきました---] 上記のZipファイルには、「icons」フォルダの中に「icon096.png〜icon190.png」が入っています。 icon96〜99は正常に読み込めていることを確認するための問題のないPNGファイルで、 icon100.png以降の読み込みからまれにアクセス違反が発生します。 gflagsなしだと、問題が発生するicon番号の場所はランダムです。 (icon100以降がどういう方法で作られたものかは不明ですが、  素材サイトで配布されているデータです) <こちらの環境のLog.txt> [---削除させていただきました---] <再現ソース> #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode(TRUE) ; // ウィンドウモードに if( DxLib_Init() == -1 ){ return -1;} // DXライブラリ初期化処理 int fPt; unsigned char *Data; int grHandle; char filename[256]; for (int i = 96; i < 191; i++) { // icon96〜190.pngを読込、こちらの環境ではicon100から問題が起きます sprintf(filename, "icons/icon%03d.png",i); fPt = FileRead_open(filename); int Size = FileRead_size(filename); Data = new unsigned char[Size]; FileRead_read(Data, Size, fPt); grHandle = CreateGraphFromMem(Data, Size);//←エラーが起きる場合はここでアクセス違反が発生します delete[] Data; FileRead_close(fPt); } // すぐ終了。90%くらいの確率で正常に終了してしまうので、その場合は何度も立ち上げ直してみてください DxLib_End(); return 0 ; // ソフトの終了 }
メンテ

Page: 1 |

Re: CreateGraphFromMemで特定のPNGファイルを読込するとまれに強制終了します ( No.1 )
名前:管理人 日時:2022/12/02 01:47

現象再現用のプログラムとデータのご提供ありがとうございます 載せて頂いたプログラムで手元でも現象が再現しました パレット付きpng画像の場合に、読み込むパレットの数が誤っていたためにデータの 存在しないメモリアドレスに対して読み取りアクセスしてしまっていたというバグでした orz 修正版をこちらにアップしましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい)
メンテ
Re: CreateGraphFromMemで特定のPNGファイルを読込するとまれに強制終了します ( No.2 )
名前:SmokingWOLF(解決済) 日時:2022/12/03 11:13

導入させていただいたところ、おかげさまで何度やっても強制終了が発生しなくなりました。 素早いご対応、誠にありがとうございます!
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存