Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Function, Result als stringlist? (https://www.delphipraxis.net/12079-function-result-als-stringlist.html)

Pseudemys Nelsoni 20. Nov 2003 10:06


Function, Result als stringlist?
 
hallo,

ich möchte eine stringlist(innerhalb der function) haben, aber wie geb ich dann das ergebnis an meine procedur? schliesslich muss ich am ende ja die stringlist wieder free'en. ich hatte es so(weiss nichtmal ob es überhaupt so geht):

Delphi-Quellcode:
function bla(s: string; c: char): TStringList;
begin
  Result := TStringList.Create;
  while Pos(c, s) > 0 do
  begin
    result.Add(Copy(s, 1, Pos(c, s)));
    Delete(s, 1, Pos(c, s));
  end;
  result.Free;
end;
ich kriege immer einen zugriffsfehler, ich denke mal weil die stringlist bereits nichtmehr existiert.

Tom 20. Nov 2003 10:09

Re: Function, Result als stringlist?
 
Ja. Free ist Free.

Luckie 20. Nov 2003 10:09

Re: Function, Result als stringlist?
 
Tut sie auch nicht.
Delphi-Quellcode:
procedure Foo(s: String; c: Char; var sl: TStringList);
begin
  ...;
end;

var
  sl: TStringList;
begin
  sl := TStringList.Create;
  try
    Foo('Hello', 'c', sl);
  finally
    FreeAndNil(sl);
  end;
Mal so aus dem Kopf.

Pseudemys Nelsoni 20. Nov 2003 10:11

Re: Function, Result als stringlist?
 
echt :?:

wie benutz ich eine stringlist als result :?: :!:
ist es möglich die function selbst als stringlist zu benutzen? oder muss ich eine in meiner procedure mitgeben? O_o

Pseudemys Nelsoni 20. Nov 2003 10:12

Re: Function, Result als stringlist?
 
danke luckie, mal versuchen ^^

Wormid 20. Nov 2003 10:12

Re: Function, Result als stringlist?
 
Lass das Result.Free mal weg, dann müsste es gehen.
Du musst aber natürlich später die Variable Free'n, die du mit der Funktion gefüllt hast.

Delphi-Quellcode:
var SL: TStringList;
begin
  SL := bla('blubb', #13);
  // ... Mach was mit SL
  SL.Free;
end;
Gruß

Wormid

Pseudemys Nelsoni 20. Nov 2003 10:15

Re: Function, Result als stringlist?
 
funzt einwandfrei, danke ;)

nochmal ne frage, wieso FreeAndNil statt Free? bzw was ist der unterschied?

Luckie 20. Nov 2003 10:18

Re: Function, Result als stringlist?
 
Free gibt nur den Speicher wieder frei. Der Zeiger auf das Objekt bleibt bestehen. Testet man jetzt den zeiger mit Assigned, um zu kucken, ob das Objekt noch existiert, bekommt man True zurück, obwohl das nicht stimmen muss. Man sollte bei der Verwendung von Free auch noch den Zeiger auf Nil setzen. Dies spart man sich, wenn man FreeAndNil nimmt.

himitsu 20. Nov 2003 10:20

Re: Function, Result als stringlist?
 
Oder so:
Delphi-Quellcode:
function bla(s: string; c: char): TStringList;
begin
  Result := TStringList.Create;
  while Pos(c, s) > 0 do begin
    result.Add(Copy(s, 1, Pos(c, s)));
    Delete(s, 1, Pos(c, s));
  end;
end;


var SL: TStringList;
begin
  {sollte in SL vorher schon was sein => SL.Free}
  SL := bla('4t54gfd', 'f');
  SL.FreeAndNil;
end;

Luckie 20. Nov 2003 10:22

Re: Function, Result als stringlist?
 
FreeAndNil ist eine Prozedur, keine Methode von einer Klasse.

Davon mal abgesehen finde ich meine Lösung besser. Man verliert nicht den Überblick ü+ber die Instanzen der Klasse und muss nicht überlegen, wo was wie freigegeben werden muss / kann. Aber das ist Geschmackssache. :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz