AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Pointer Problem

Ein Thema von razer91 · begonnen am 5. Mär 2010 · letzter Beitrag vom 7. Mär 2010
Antwort Antwort
razer91

Registriert seit: 17. Aug 2009
20 Beiträge
 
#1

Pointer Problem

  Alt 5. Mär 2010, 23:00
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
Flo
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.062 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Pointer Problem

  Alt 6. Mär 2010, 00:16
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 ?
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#3

Re: Pointer Problem

  Alt 6. Mär 2010, 10:06
Das Dispose in BtnOkClick gehört in FormDestroy. PNewData gehört demzufolge ins Formular.
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

Re: Pointer Problem

  Alt 6. Mär 2010, 10:08
PFirstData gehört ins Formular und scheint da auch zu stehen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Pointer Problem

  Alt 6. Mär 2010, 12:58
und beim Ausgeben brauchst Du kein New(PCurrentData).
PCurrentData wird doch nur als Zeiger durch die Liste benötigt.

Gruss
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
razer91

Registriert seit: 17. Aug 2009
20 Beiträge
 
#6

Re: Pointer Problem

  Alt 7. Mär 2010, 12:33
Danke euch allen
Flo
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:51 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