AGB  ·  Datenschutz  ·  Impressum  







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

Stack - erstes Element löschen

Ein Thema von spox · begonnen am 7. Sep 2008 · letzter Beitrag vom 7. Sep 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von spox
spox

Registriert seit: 23. Sep 2007
47 Beiträge
 
Delphi 7 Personal
 
#1

Stack - erstes Element löschen

  Alt 7. Sep 2008, 13:48
Hallo liebe DP!

Ich sitz gerade wieder vor einem Problem mit meinem Stack. Ich möchte das letzte Element eines Stapel löschen... Ich habe mir dafür eine Variable Hilf angelegt, die auf den Anfang des Stapels zeigt, damit ich den nicht verliere. Ich möchte den Stapel mit einer Schleife durchlaufen und das letzte Element dann disposen. Das Blöde hier dran ist nur, dass meine While-Schleife einfach nie zu Ende geht. Sie rattert pausenlos durch, was eine CPU-Auslastung von 100 % zur Folge hat.

Delphi-Quellcode:
procedure letztesloeschen(AStapel:PStapel);
var
  Hilf,temp:PStapel;
begin
  Hilf:= AStapel;
  While AStapel <> nil do temp:= AStapel^.next;
  Dispose(temp);
  AStapel:= Hilf;
end;
Die Prozedur ist in einer anderen Unit nur für Stapelprozeduren. Der Stapel wird durch den Parameter übergeben. Der Stapel wird beim Formcreate auf nil gesetzt.

Ich hoffe ihr könnt mir helfen
MfG,
spox
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Stack - letztes Element löschen

  Alt 7. Sep 2008, 13:52
Das letzte ist beim Stack doch das erste.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von spox
spox

Registriert seit: 23. Sep 2007
47 Beiträge
 
Delphi 7 Personal
 
#3

Re: Stack - letztes Element löschen

  Alt 7. Sep 2008, 13:56
Da hast du natürlich Recht. Dann habe ich mich vielleicht falsch ausgedrückt. Ich will das erste Element entfernen. Praktisch das Element, das auf nil zeigt.
MfG,
spox
  Mit Zitat antworten Zitat
Benutzerbild von idontwantaname
idontwantaname

Registriert seit: 31. Aug 2004
Ort: Traiskirchen
575 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Stack - letztes Element löschen

  Alt 7. Sep 2008, 13:59
Hallo!

Ich möchte nur mal anmerken, dass du eine Endlosschleife hast

While AStapel <> nil do temp:= AStapel^.next; Es ändert sich doch rein gar nichts an der Schleifenbedingung, wenn du temp etwas zuweist -> sprich Endlosschleife.
Oliver Hanappi
Besucht meine neue Homepage: http://oli.hux.de
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Stack - letztes Element löschen

  Alt 7. Sep 2008, 14:01
Es sollte doch .Prior sein oder?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von spox
spox

Registriert seit: 23. Sep 2007
47 Beiträge
 
Delphi 7 Personal
 
#6

Re: Stack - letztes Element löschen

  Alt 7. Sep 2008, 14:02
und wie löse ich das Problem?
Der Stapel zeigt doch irgendwann auf nil. Nämlich dann, wenn das erste Element erreicht worden ist... Oder ist das nicht richtig?

@mkinzler: was heißt .Prior?
MfG,
spox
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Stack - letztes Element löschen

  Alt 7. Sep 2008, 14:05
Ich würde den Vorgänger (.Next) nicht Nachfolger (.Prior) nennen. Ist zwar egal, verwirrt aber.
While AStapel^.next <> nil
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von spox
spox

Registriert seit: 23. Sep 2007
47 Beiträge
 
Delphi 7 Personal
 
#8

Re: Stack - letztes Element löschen

  Alt 7. Sep 2008, 14:08
deine Lösung klappt nicht... ist trotzdem Endlos

Ich habe jetzt mal versucht, AStapel:= AStapel^.Next (While AStapel <> nil do AStapel:= AStapel^.next; ) zu setzen. Aber das geht auch nicht, da es eine Adressverletzung sei. Bin echt ratlos...
MfG,
spox
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Stack - letztes Element löschen

  Alt 7. Sep 2008, 14:12
Bist du sicher, dass das Root-Element auf Nil zeigt
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von spox
spox

Registriert seit: 23. Sep 2007
47 Beiträge
 
Delphi 7 Personal
 
#10

Re: Stack - letztes Element löschen

  Alt 7. Sep 2008, 14:14
Ich setze den Stapel beim FormCreate auf nil. Der ganze Stapel sieht dann wie folgt aus:

Stapel -> nil (leerer Stapel)

nach Hinzufügen des ersten Elementes:

Stapel -> [Element 1] -> nil

nach Hinzufügen eines weiteren Elementes:

Stapel -> [Element 2] -> [Element 1] -> nil

...

UPDATE:

ich habs jetzt soweit hinbekommen, dass ich das letzte Element gelöscht hab (dispose). Das Problem an der Sache ist ja jetzt, dass das jetzt Letzte bzw. das vorher vorletzte immer noch auf das gelöschte zeigt. Das geht ja natürlich nicht. Deshalb gibts eine Fehlermeldung.

edit:

oh, danke Eddy
eine Frage dazu: bei Stapel^.next^.next rufst du das übernächste Element auf?
MfG,
spox
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:49 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