![]() |
Pointer Problem
Guten Abend zusammen,
Ich habe ein Problem mit einer einfachen Pointerübung (wahrscheinlich sitzte ich einfach schon zu lange davor :wall: ) :). 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:
Die Procedure zum Einlesen so:
type
PTPerson = ^TPerson; TPerson = record Name: string; Vorname: string; Alter: Integer; Nachfolger: PTPerson; end;
Delphi-Quellcode:
und das Ausgeben der verketteten Liste so:
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;
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 |
Re: Pointer Problem
in btOKClick besorgst du mit New Speicherplatz für die Daten, stellst die Daten in diesen Speicherbereich
und dann schmeißt du mit Dispose alles wieder in den Müll. Was hast du denn gedacht wohin danach die Pointer zeigen ? |
Re: Pointer Problem
Das Dispose in BtnOkClick gehört in FormDestroy. PNewData gehört demzufolge ins Formular.
|
Re: Pointer Problem
PFirstData gehört ins Formular und scheint da auch zu stehen.
|
Re: Pointer Problem
und beim Ausgeben brauchst Du kein New(PCurrentData).
PCurrentData wird doch nur als Zeiger durch die Liste benötigt. Gruss |
Re: Pointer Problem
Danke euch allen :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz