Добрый день. Есть код функции:
Код:
function DelParagraph(const Str1,Str2:string; L:integer):string;
var
J,I,Count,D,G:integer;
Word1,Word2: string;
T1,T2:TStringList;
begin
T1:=TStringList.Create;
T2:=TStringList.Create;
T2.Sorted := true;
T2.Duplicates := dupIgnore;
Result:='';
if Length(Str1) = 0 then Exit;
Count:=0;
try
T1.Text:=SpliteText(Del(Str1));
G:=(T1.Count);
T2.Text:=SpliteText(Str2);
for I := 0 to T2.Count-1 do
begin
Word1:=(T2[i]);
begin
for J := 0 to T1.Count-1 do
begin
Word2:=(T1[J]);
if CompareWords(Word1,Word2) then
begin
Inc(Count);
end;
end;
end;
end;
if (Count = 0) or (G = 0) then
Exit
else
D:=((Count*100 Div G));
if D > L then
Result:=Str1;
finally
FreeAndNil(T1);
FreeAndNil(T2);
end;
end;
Del, SpliteText, CompareWords - вызываемые функции, то же имеют TStringList и везде try-finally-end;
Вызов функции:
FullStr3:=DelParagraph(FullStr2,SWords,L); в общем функция получает две строки1 и 2 и число, сравнивает слова в строках и если число совпадений превышает порог переносит строку1 на выход.
Проблема состоит в том что при завершении программы ReportMemoryLeaksOnShutdown выдает сообщение о небольшой утечке памяти в TStringList
если заблокировать вызов функции, то утечка пропадает
ВОпросы:
1. как вообще можеть быть утечка при наличии try-finally-end вроде бы гарантирующее уничтожение объектов
2. как вообще определить где конкретно это происходит
3. может быть код кривой? тогда где?