Re: Утечка памяти в delphi
От: alive Россия  
Дата: 21.05.05 19:15
Оценка: +1
Здравствуйте, deamon_tt, Вы писали:

_>Подскажите почему это может происходить? И вообще когда делфи уничтожает екземпляры класса? После выхода из функции? И что происходит в строке запуска функции, происходит копирование

Нет
_>или DncList просто получает адресс уже созданного екземпляра класса
Да
_> и где про ето почитать... Заранее спасибо за ответы...
F1, любая толковая книга по Delphi

_>Сама функция:

_>Function GetFileList(dir:string='';mask:string='*.*';attr:integer=faAnyFile):TStringList;
_>var res:cardinal;s:tsearchrec;
_>begin
_> result:=TStringList.Create;//Здесь утечка. Кто будет за собой убирать?
_> if dir='' then dir:=GetCurrentDir;
_> res:=FindFirst(dir+'/'+mask,attr,s);
_> while res=0 do begin
_> result.Append(s.Name);
_> res:=FindNext(s);
_> end;
_>end;

Если уж так хочется по таймеру то сделай хотя-бы так:

procedure GetFileList(SList: TStringList; dir:string='';mask:string='*.*';attr:integer=faAnyFile); 
var res:cardinal;s:tsearchrec; 
begin 
    SList.Clear;
  if dir='' then dir:=GetCurrentDir; 
  res:=FindFirst(dir+'/'+mask,attr,s); 
  while res=0 do begin 
    SList.Append(s.Name); 
    res:=FindNext(s); 
  end; 
end;

//Использование
procedure TFormShablon.TimerTestFolderTimer(Sender: TObject); 
var DncList:TStringList; 
begin
    //Или создавай свой список в OnCreate формы и уничтожай в OnDestroy
    DncList:= TStringList.Create;
    try
        GetFileList(DncList, 'c:\123', '*.*');
        //Что-то делаем со списком
    finally
        DncList.Free;
    end
end;

А вообще то для такого рода задач есть функции WinAPI FindFirstChangeNotification/FindNextChangeNotification.
Пример использования можно посмотреть в RXLib (модуль RxNotify).
... << RSDN@Home 1.1.4 beta 7 rev. 455>>
Keep yourself alive
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.