▼ げんたさん
>>eGroupsの、030525fix2.zipです。
>*CShareData::GetMacroName()
>外からバッファを与えるならバッファサイズも併せて与えた方が良いと思い,その辺の防御機構を追加しました.
了解しました。
*PPAのメモリリーク
>どの辺がメモリリークなのでしょうか.
・InitDll()内
CSMacroMgr::m_MacroFuncInfoNotCommandAr
r[i].m_pszData = new char [ strlen(CSMacroMgr::m_MacroFuncInfoNotCom
mandArr[i].m_pszFuncName) + 256 ];
GetDeclarations( CSMacroMgr::m_MacroFuncInfoNotCommandArr
[i] );
・GetDeclarations( MacroFuncInfo& cMacroFuncInfo )内
cMacroFuncInfo.m_pszData = new char [ lstrlen( szBuffer ) + 1 ];
このあたりです。同じポインタ変数に2回連続してnewの結果?を入れています。
>登録した文字列をPPA.DLLが解放されるまで保持し続けないと正しく動かないからこうなっているのかなと思って(中略...)特にそういう制限は書いてないようなので大丈夫なのかな?
私もそう思ったのですが、保持しなくても動くようです。
(このCPPA.cppの変更はマクロ拡張にも含まれています。)
ちなみにstaticなのは、「マクロ拡張」のエラー表示で流用したかったからですが、
引数の型チェックはPPA.dllがさきにエラーを返してくるため、
定義関数内のエラー処理で引数の型情報まで表示する必要はなかったかもしれません。
>ただどうせやるなら,メモリの取得解放を繰り返さなくても呼び出し側で大きなバッファを用意してそこに入れてもらった方が効率的かとおもいます.一応取り込む前に動作確認してみます.
たしかに。適当に書き換えちゃってください。m(__)m
*ヒットした文字列の表示文字数制限の変更
>これ,変更した意図がよくわからないのですが.ソース上でも単に最大値を設定しているだけですし.
とくに意味はありませんが、
・Grep結果に表示された文字列を何かに流量している人がいたら途中で切れるのはよくない
・逆に制限をなくして正直に1行全部表示してメモリーを使い果たすのも問題
と思い、とりあえず現状で確保しているサイズの安全な範囲の最大値に近い、きりのいい数字にしてみました。