[DUG] Dumb Friday Question
John Bird
johnkbird at paradise.net.nz
Fri May 4 14:58:51 NZST 2007
I have seen an exact similar case in one of the few external components I
use - TFindFile
which has code like:
s:TStringlist is a private variable in the FindFiles unit,
function TFindFile.SearchForFiles: TStringList;
begin
s.Clear;
try
FileSearch(Path);
finally
Result := s;
end;
end;
the only reference to s in the FileSearch function is
s.Add(inPath + Rec.Name);
The component also has:
constructor TFindFile.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Path := IncludeTrailingBackslash(GetCurrentDir);
FileMask := '*.*';
FileAttr := [ffaAnyFile];
s := TStringList.Create;
end;
destructor TFindFile.Destroy;
begin
s.Free;
inherited Destroy;
end;
I call it from my program with code like:
strlist:TStringList;
and
strlist:=FindFile1.SearchforFiles;
That is I do no creating or freeing of the strlist myself - the component
does all of the housework is my understanding. Thats one of the reasons I
use it, as it encapsulates a few fiddly things like this.
Is this correct use or is this creating memory leaks? I found errors if I
tried to create or free the strlist myself - and was advised that
effectively the component was doing this and I didn't need to.
[This is a utility I have for recursive folder searches of source files for
a matching string displaying matches in a stringgrid - a sort of visual Grep
- would be happy to share it if anyone can point out any errors or
improvements]
>From the Help
"TStringList.Clear:
Deletes all the strings from the list.
procedure Clear; override;
Description
Call clear to empty the list of strings. All references to associated
objects are also removed. However, the objects themselves are not freed."
John
-----Original Message-----
From: delphi-bounces at delphi.org.nz [mailto:delphi-bounces at delphi.org.nz] On
Behalf Of Xander (GMail)
Sent: Friday, 4 May 2007 2:02 p.m.
To: 'NZ Borland Developers Group - Delphi List'
Subject: RE: [DUG] Dumb Friday Question
Jeremy,
If the function returns a TStringList then it should be the responsibility
of the caller of that function to FREE the returned TStringList after it has
finished using it. You cannot free it inside the function.
Regards
_____
From: delphi-bounces at delphi.org.nz [mailto:delphi-bounces at delphi.org.nz] On
Behalf Of Leigh Wanstead
Sent: Friday, May 04, 2007 1:55 PM
To: vss at vss.co.nz; NZ Borland Developers Group - Delphi List
Subject: RE: [DUG] Dumb Friday Question
Hi Jeremy,
I think you need this one http://v.mahon.free.fr/pro/freeware/memcheck
;-)
Regards
Leigh
www.smootharm.com
-----Original Message-----
From: delphi-bounces at delphi.org.nz [mailto:delphi-bounces at delphi.org.nz]On
Behalf Of Jeremy Coulter
Sent: Friday, 4 May 2007 1:28 p.m.
To: delphi at delphi.org.nz
Subject: [DUG] Dumb Friday Question
Hi All. This is a question that might be infulenced by some serious lack of
sleep :-)
I have a funtion. Its return result is a TStringlist.
In my code I create a TStringlist then add my values to it, then pass this
to the RESULT varaible for the function.
Now, this is prob. an obvious answer than I prob. do actually know, but if
I got:-
sResult := TStringList.create;
sResult.add('blah');
Result:=sResult;
Then if I free sResult, then I loss the values I added, and the result is
empty as you would expect.
But the issue I have is, so if I DONT free sResults, what happens to it?
Surley it stays in memory,a dn I would end up with a memory leack after
repeaditive calls. Is that right? Or is because the variable is function
specific its free by default etc?
Its a basic question I know....but the more I thought about it the more
uncertain I became....I really need some sleep so that prob. the real
probelm :-)
Jeremy
__________ NOD32 2238 (20070503) Information __________
This message was checked by NOD32 antivirus system.
http://www.eset.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.adventureeducation.co.nz/pipermail/delphi/attachments/20070504/5c58dffd/attachment-0001.html
More information about the Delphi
mailing list