這幾天在移植代碼,将之前的項目移植到插件架構裡面,因為之前是單EXE的。對記憶體洩漏問題不是很在意。在DLL下面就不一樣了,是以加入FastMM4來做監控調試。發現之前的ScripParser解析SQL時存在記憶體洩漏。
其中有段代碼
function ObjectFindFirst(const obj: ISuperObject; var F: TSuperObjectIter): boolean;
var
i: TSuperAvlEntry;
begin
if ObjectIsType(obj, stObject) then
begin
F.Ite := TSuperAvlIterator.Create(obj.AsObject);
F.Ite.First;
i := F.Ite.GetIter;
if i <> nil then
begin
f.key := i.Name;
f.val := i.Value;
Result := true;
end else
Result := False;
//原來傳回False也有可能建立了
//F.Ite := TSuperAvlIterator.Create(obj.AsObject);
end else
Result := False;
end;
///最後修改代碼,沒有了記憶體洩漏