トップページ > 記事閲覧
DrawPixel()でメモリ破壊が起こる
名前:GASHI 日時: 2018/06/27 23:40

お世話になります。 DX9の使えない環境、もしくはSetScreenMemToVramFlag( FALSE ); を使用した場合に再現性があります。(バージョンは3.19bです) MakeScreen()で作成したバッファにDrawPixel()をします。 バッファの大きさの範囲外に点を描画します。もちろん描画はされませんが。 そのバッファをDeleteGraph()したタイミングで 「FreeMemory Error : デバッグ領域の破壊を確認しました、メモリの不正なアクセスが発生したことが考えられます」 が表示されNULLへの書き込み例外が発生。あるいは何も言わずに落ちたりする場合があります。 DrawPixel()を呼び出した時点では、エラーを返したり、落ちたり、ということは一切ありません。 範囲外に描画しようとすると必ずそうなるというものでもなく、 一見するとクリッピングは正常に動作しているかのように見えます。 エラーが発生するタイミングがDeleteGraph()した時だけなので、非常に特定が難しかったのですが、 DrawPixel()に範囲外の値を与えないように自前でクリッピングしたところ、一切この問題は 発生しなくなったことから判明しました。 以上、バグだと思われるので、ご報告させていただきました。
メンテ

Page: 1 |

Re: DrawPixel()でメモリ破壊が起こる ( No.1 )
名前:管理人 日時:2018/06/28 01:09

ご指摘ありがとうございます すみません、ソフトウェアレンダリングモードでは SetDrawArea で指定されている 描画範囲より右側、下側に1ピクセル外れた位置にも描画できるようになってしまっていました 例: int Screen = MakeScreen( 256, 256 ); SetDrawScreen( Screen ); DrawPixel( 256, 256, GetColor( 255,255,255 ) ); // ←クリッピングされない これがメモリ破壊の原因でした 修正版をアップしましたので、よろしければお試しください 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.1 Berlin 用 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 // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: DrawPixel()でメモリ破壊が起こる ( No.2 )
名前:GASHI 日時:2018/06/28 02:15

ありがとうございます。 修正を確認しました。
メンテ

Page: 1 |

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

   クッキー保存