トップページ > 記事閲覧
DxSetAllocSizeOutFlag( TRUE );時の循環呼び出しについて
名前:uncle 日時: 2024/11/13 15:12

お世話になっております。 DxSetAllocSizeOutFlag( TRUE ); を使用してメモリ使用量をダンプするようにしようと思ったのですが、 static void DxPrintAllocSize( void )の内部、 正確にはDxLigWin.cppの extern int LogFileAdd_WCHAR_T_PF( const wchar_t *LogFilePath, const wchar_t *ErrorStr )の内部、 char *UTF8StringBuffer = ( char * )DXALLOC( UTF8StringBufferBytes ) ; でアロケーションが行われる事で処理が循環してしまい、スタックオーバーフローが発生してしまうようです。 コールスタック →DxPrintAllocSize →LogFileFmtAddW →LogFileAddW →LogFileAdd_WCHAR_T →LogFileAdd_WCHAR_T_PF →NS_DxAlloc →DxAllocBase →DxPrintAllocSize どう修正するべきか少し微妙な所かとは思いますが、 ご確認よろしくお願いいたします。m(_ _)m
メンテ

Page: 1 |

Re: DxSetAllocSizeOutFlag( TRUE );時の循環呼び出しについて ( No.1 )
名前:管理人 日時:2024/11/13 23:14

ご指摘ありがとうございます、手元でも現象を確認しました 修正方法ですが、LogFileAdd_WCHAR_T_PF の該当箇所で固定長( 1024バイト )のバッファを用意して、 その容量を超えない場合は DXALLOC を使用しないようにすることで循環呼び出しを回避するようにしました よろしければこちらの修正版をお使いください 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 12 用 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: DxSetAllocSizeOutFlag( TRUE );時の循環呼び出しについて ( No.2 )
名前:uncle(解決済み) 日時:2024/11/14 01:19

>修正方法ですが、LogFileAdd_WCHAR_T_PF の該当箇所で固定長( 1024バイト )のバッファを用意して、 >その容量を超えない場合は DXALLOC を使用しないようにすることで循環呼び出しを回避するようにしました 修正方法についてもご報告ありがとうございますm(_ _)m 無事、ログを確認できました。 (タスクマネージャーを確認していて妙にサイズ食ってるなと思っていたのですが疑問が解決しました) ありがとうございます。
メンテ

Page: 1 |

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

   クッキー保存