Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zugriffversetzlung beim übergeben einer TSringlist (https://www.delphipraxis.net/33596-zugriffversetzlung-beim-uebergeben-einer-tsringlist.html)

endeffects 9. Nov 2004 17:51


Zugriffversetzlung beim übergeben einer TSringlist
 
Hallo,
ich hab mir eine Funktion gebastelt die als Ergebnis
eine TStringlist übergeben soll, allerdings
erhalte ich dabei eine Zugriffsverletzung

die funktion die als ergebnis die Tstringlist liefert:

Delphi-Quellcode:
function ripstring(Source: String): TStringlist;
var
  Mylist: TStringlist;
  Cut: string;
begin
  Mylist:= TStringList.Create;
  Mylist.Duplicates:= dupIgnore;
  Mylist.Sorted:= true;
  ....
  if Cut <> '' then
    Mylist.Add(Cut);
  ....
  Result:= Mylist;
  Mylist.Free;
end;
wenn ich diese Funktion nun aufrufe läuft diese auch
durch und liefert das erwartete Ergebnis, wenn ich nun
aber versuche die Stringliste an Tmplist zu übergeben erhalte
ich eine Zugriffsverletzung:

Delphi-Quellcode:
var
  Tmplist: TStringlist;
begin
  ....
  Tmplist:= TStringList.Create;
  Tmplist.Addstrings(ripstring(MyString));
//oder auch
//Tmplist.Assign(ripstring(MyString));
hat jemand vielleicht eine idee?

Duffy 9. Nov 2004 18:02

Re: Zugriffversetzlung beim übergeben einer TSringlist
 
Hallo endeffects,
Delphi-Quellcode:
function ripstring(Source: String): TStringlist;
var
  Mylist: TStringlist;
  Cut: string;
begin
  Mylist:= TStringList.Create;
  Mylist.Duplicates:= dupIgnore;
  Mylist.Sorted:= true;
  ....
  if Cut <> '' then
    Mylist.Add(Cut);
  ....
  Result:= Mylist;  // hier wird nur ein Zeiger auf Mylist an Result übergeben ...
  Mylist.Free; // und hier gibts Du die Liste frei ... knall ... wenn Du auf das Result der Funktion zurückgreifst.
end;
bye
Claus

endeffects 9. Nov 2004 18:11

Re: Zugriffversetzlung beim übergeben einer TSringlist
 
oh danke für die hilfe :)
aber wie geb ich Myliste denn wieder frei,
muss ich diese dann global deklarieren und
nach dem übergeben der liste freigeben?

Delphi-Quellcode:
Tmplist.Addstrings(ripstring(MyString));
Mylist.free;

Duffy 9. Nov 2004 18:16

Re: Zugriffversetzlung beim übergeben einer TSringlist
 
Hallo endeffects,
Code:
function ripstring(Source: String): TStringlist;
var
  Cut: string;
begin
  Result := TStringList.Create;
  Result.Duplicates:= dupIgnore;
  Result.Sorted:= True;
  ....
  if Cut <> '' then
    Result.Add(Cut);
  ....
end;
Code:
procedure Irgendwas;
var
  MyList: TStringList;
begin
  Mylist := ripstring('OK, bald ist Weihnachten ...');
  Mylist.Free; // Stringliste freigeben
end;
bye
Claus


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:09 Uhr.

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