Показать сообщение отдельно
  #1  
Старый 17.03.2013, 17:19
Pcrepair
 
Сообщения: n/a
По умолчанию Небольшая утечка памяти с TStringList

Добрый день. Есть код функции:

Код:
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. может быть код кривой? тогда где?
Ответить с цитированием