Guten Abend zusammen,
Ich habe ein Problem mit einer einfachen Pointerübung (wahrscheinlich sitzte ich einfach schon zu lange davor
)
.
Es soll in eine einfach verkettete Pointerliste aus Records erstellt werden (mit 3 Werten (2 strings und 1 integer) pro Record) und dann irgendwo ausgegeben werden.
Mein Record sieht so aus:
Delphi-Quellcode:
type
PTPerson = ^TPerson;
TPerson = record
Name: string;
Vorname: string;
Alter: Integer;
Nachfolger: PTPerson;
end;
Die Procedure zum Einlesen so:
Delphi-Quellcode:
procedure TfrmEnterData.btOKClick(Sender: TObject);
var
PNewData: PTPerson;
begin
New(PNewData);
PNewData^.Name := txtName.Text;
PNewData^.Vorname := txtFirstName.Text;
PNewData^.Alter := StrToInt(txtAge.Text);
PNewData^.Nachfolger := PFirstData; //PFirstData wird mit "nil" initialisiert beim Programmstart
PFirstData := PNewData;
Dispose(PNewData);
ModalResult := mrOK;
end;
und das Ausgeben der verketteten Liste so:
Delphi-Quellcode:
procedure TfrmMain.btGetDataClick(Sender: TObject);
var
PCurrentData: PTPerson;
i: Integer;
Data: TListItem;
Item: TListItem;
begin
New(PCurrentData);
PCurrentData := PFirstData;
while (PCurrentData <> nil) do
begin
Item := lvData.Items.Add();
Item.Caption := PCurrentData^.Name;
Item.SubItems.Add(PCurrentData^.Vorname);
Item.SubItems.Add(IntToStr(PCurrentData^.Alter));
PCurrentData := PCurrentData^.Nachfolger;
end; //end while
end;
Mein Problem ist nun folgendes: Das Einlesen verläuft noch soweit ohne Schwierigkeiten, die angezeigten Werte im Record stimmen hier noch. Wenn ich dann Ausgebe sind auf einmal die beiden strings gelöscht worden (es wird '' angezeigt im Debugger) und kommen auch in meiner Listview nicht mehr an... Desweiteren bekommt "PCurrentData^.Nachfolger" auf wundersame Weise in der Ausgebenmethode (während in die Listview geschrieben wird) einen Wert zugeordnet der in die Wüste zeigt. Dann fliegt mir der ganze Mist um die Ohren... seht ihr einen Logikfehler oder sonst irgendwas... ich glaub ich sitzt hier echt schon zu lange
Vielen Dank schon mal im Vorraus!
Grüße
razer91