Delphi-PRAXiS
Seite 1 von 7  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit Zeigern (https://www.delphipraxis.net/109409-problem-mit-zeigern.html)

praesident 29. Feb 2008 19:40


Problem mit Zeigern
 
Hallo,

ich habe in der Schule beim Umstieg von Pascal auf Delphi ein Problem. Und zwar bekomme ich beim Arbeiten mit Zeigern ständig einen Exeption Fehler angezeugt.

Hier der problematische Programmteil:


Delphi-Quellcode:
PROCEDURE push(VAR zkopf:tzeiger;inhalt:char;i:byte);
VAR zhilf,zneu:tzeiger;

BEGIN
 zhilf:=zkopf;
 zhilf^.next:=NIL;
IF NOT(i=1) THEN
 BEGIN
 REPEAT
  zhilf:=zhilf^.next;
 UNTIL zhilf^.next=NIL;
 END;
  new(zneu);
  zneu^.inhalt:=inhalt;
  zhilf^.next:=zneu;
  zneu^.next:=NIL;
END;
wenn ich einen Wert eingebe, bleibt er jedesmal bei zhilf^.next:=NIL; stehen. nehm ich die zeile raus, weiter unten.
bei Pascal hatte ich das Problem nicht. Woran liegt das?

Ich komm wirklich nicht mehr weiter
Danke für eure Hilfe.

mfg
de präsi

DP-Maintenance 29. Feb 2008 19:43

DP-Maintenance
 
Dieses Thema wurde von "Dax" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Object-Pascal / Delphi-Language" verschoben.

SirThornberry 29. Feb 2008 19:46

Re: Problem mit Zeigern
 
wie rufst du die funktion auf und warum übergibst du zkopf als var parameter wenn du in der Funktion den Wert gar nicht neu setzt?

DeddyH 29. Feb 2008 19:46

Re: Problem mit Zeigern
 
Zitat:

Delphi-Quellcode:
zhilf^.next:=NIL;
IF NOT(i=1) THEN
BEGIN
REPEAT
  zhilf:=zhilf^.next;
UNTIL zhilf^.next=NIL;

Diese Logik versteh ich nicht. Du setzt den Nachfolger initial auf nil, weist diesen in der Schleife dem Zeiger selbst zu (also sind anschließend beide nil) und fragst ihn dann wieder ab :gruebel:

praesident 29. Feb 2008 19:51

Re: Problem mit Zeigern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von SirThornberry
wie rufst du die funktion auf und warum übergibst du zkopf als var parameter wenn du in der Funktion den Wert gar nicht neu setzt?

Hier wird die Prozedur aufgerufen:

Delphi-Quellcode:
  init(zkopf);
  laeng:=length(edit1.Text);
  FOR i:=1 TO laeng DO
   BEGIN
    push(zkopf,edit1.text[i],i);
   END;
"i" übernehme ich, weil die Funktion, die prüfen sollte, ob zkopf auf NIL zeigt auch diesen exeption fehler erzeugt hatte

ja, das mit dem VAR parameter wurde uns glaub ich von meinem info lehrer so gesagt...scheint aber wirklich überflüssig zu sein

danke

PS: ich hab den Fehler nochmal als anhang hochgeladen

mkinzler 29. Feb 2008 19:53

Re: Problem mit Zeigern
 
Was soll den die Funktion genau machen?

SirThornberry 29. Feb 2008 19:55

Re: Problem mit Zeigern
 
anhand des Fehlers sag ich mal das "zkopf" nil ist. Und damit krachts natürlich beim zugriff auf next.
Anhand dessen was du bisher gepostet hast empfehle ich dir das Video Pointerfun ( http://www.delphipraxis.net/internal...=357830#357830 ). Da werden Pointer wunderbar erklärt mit Beispiel.

praesident 29. Feb 2008 19:57

Re: Problem mit Zeigern
 
Zitat:

Zitat von mkinzler
Was soll den die Funktion genau machen?

naja, das ist teil eines rechners, wo ich die aufgabe in soner postfix-form eingebe...

dazu soll das eingabefeld ausgelesen werden und jedes zeichen einzeln in einen stack (die liste) geschrieben werden...

danach wird gerechnet...

DeddyH 29. Feb 2008 19:58

Re: Problem mit Zeigern
 
Nochmal:
Delphi-Quellcode:
zhilf^.next:=NIL; //Nachfolger ist nil
IF NOT(i=1) THEN
BEGIN
REPEAT
  zhilf:=zhilf^.next;   //jetzt ist auch zhilf nil
UNTIL zhilf^.next=NIL; //next von nil^?

Macci 29. Feb 2008 20:02

Re: Problem mit Zeigern
 
Warum nicht einfach so?

Delphi-Quellcode:
PROCEDURE push(VAR zkopf:tzeiger;inhalt:char);
VAR zhilf,zneu:tzeiger;
BEGIN
zhilf:=zkopf;
WHILE NOT (zhilf^.next=NIL) DO zhilf:=zhilf^.next;

  new(zneu);
  zneu^.inhalt:=inhalt;
  zhilf^.next:=zneu;
  zneu^.next:=NIL;
END;


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:27 Uhr.
Seite 1 von 7  1 23     Letzte »    

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