[Delphi] - Pointer - Werte zuweisen - aber wie?

Hey Leute;
Also ich habe folgende Situation:
Code:
type
   TInhalt: string[20];
   TZeiger: ^TEintrag;
   TEintrag = RECORD inhalt:TInhalt; verweis:TZeiger; END;
var
   Liste: ARRAY[1..25] of TEIntrag;
Jetzt will ich in einer Prozedur etwas in die Liste an der richtigen Stelle einfügen. Herauszu suchen, wo die richtige Stelle ist, ist kein Problem, aber das Einfügen will mir nciht gelingen.
Derzeit:
Code:
var y:TZeiger;
{...}
y:=Liste[1].verweis //Liste[1].verweis verweist auf Liste[4]
y^.Inhalt:='blabla';
Leider wird y^.Inhalt gändert aber nicht Liste[4].inhalt, was ich eigentlich damit erreichen wollte.
Google hat bisher nciht geholfen ;-)
Danke für eure Hilfe!!!
Eure Mana!
 
Ich denke mal das hier stimmt nicht:
Code:
y:=Liste[1].verweis //Liste[1].verweis verweist auf Liste[4]
Poste mal den ganzen Code.
 
war ich mir auch nicht sicher, aber mit '@' gibt es erst recht Fehler.
Also, ich versuche eine Liste zu verwalten. Das besagt Problem ist bei der Prozedur zum Einfügen:
Code:
procedure einfuegen(var l:TListe; neuer:TInhalt); 
//'neuer' wird aus einem EDIT-Feld genommen
var y,frei:TZeiger;
Begin

     if liste_leer(l) or (neuer<l[_aktuell].verweis^.Inhalt) then Begin
        y:=l[_free].verweis;
        l[_free].verweis:=l[_free].verweis^.verweis;
        y^.Inhalt:=neuer;
        y^.verweis:=l[_aktuell].verweis;
        l[_aktuell].verweis:=y;
        l[_kopf].verweis:=y;
        End {...}
End;
Hinweis:
Liste[_free] ist mein "Freepointer" - der verweis zeigt immer auf das nächste freie Feldelement
Liste[_aktuell] ist mein "aktuellpointer" - der Verweis zeigt auf das aktuelle Element. Wird am Anfang dieser Prozedur auf den Anfang der Liste gesetzt.
Liste[_kopf] ist der "Kopfpointer" - gibt den Ort des ersten Listenelements an.

Ist alles etwas komplex - muss aber so sein, da das in der (Schulaufgabe) so vorgegeben wurde
 
Erstmal vorweg:
Du solltest dir mal das Styleguide angucken. [1]
Und dir ganz schnell angewöhnen deinen Code zumindest so ähnlich strukturiert aufzubauen. Ich frage mich, wie du noch zurecht kommst mit deinem Code. ;)
Zum Beispiel statt TZeiger und TEintrag, solltest du TEintrag und PEintrag schreiben, damit man weiss, dass PEintrag (P für Pointer) ein Zeiger auf TEintrag darstellt.

Zu Listen gibt es im Übrigen sehr viele Beispiele. Hast du dir mal eins angeschaut?
Ausserdem zeigst du auch nich deinen ganzen Code, sondern Fragmente aus denen man rekonstruieren muss, wie du deine Liste aufgebaut hast.

Wenn _free der Index des nächsten freien Feldes ist, müsste doch folgendes den Inhalt dieses Feldes füllen?

Code:
Liste[_free].inhalt := 'Neues Feld';  // Neues Feld mit Inhalt füllen
Liste[_free].verweis := nil; // Beim neusten Feld ist erstmal Schluss
Liste[_aktuell].verweis := @Liste[_free]; //Aktuelles Feld zeigt auf neues
Inc(_aktuell); // Nun ist unser neustes Feld aktuell
Inc(_free); // Das nächste Leere feld ist nun eins weiter

Drumherum müssen natürlich die üblichen Abfragen hin und du musst aufpassen, dass dein konstant großes Array nicht übeschritten wird. Ich würde deswegen ein dynamisches Array empfehlen und, dass du die Listenelemente dann dynamisch erzeugst.

[1] http://dsdt.info/grundlagen/styleguide/
 
Zurück
Oben