Hallo alle zusammen!
Ich schreib grad mein Infoprojekt mit Delphi 7 und bin am verzweifeln. Ich bin auch nicht so bewandert im Programmieren (aber es macht mir Spaß
), außer in der Schule mach ich da nichts, also entschuldige ich mich jetzt schonmal im Voraus für meine blöden Fragen...
Ein Modul meines Programms ist eine
Unit "Keller" (also ein Stack). Leider funktioniert die bei mir gar nicht.
Hier erstmal der Quelltext Push-Funktion:
Delphi-Quellcode:
unit Keller;
interface
type
ZElement = ^TElement;
TElement =
record
Daten:
string;
Voriges, Naechstes: ZElement;
end;
TKeller =
class(TObject)
public
constructor Create();
procedure Push(eintrag:
string);
function Pop(): ZElement;
private
Erstes: ZElement;
end;
implementation
constructor TKeller.Create();
begin
inherited;
Erstes :=
nil;
end;
procedure TKeller.Push(eintrag:
string);
var
X,Y: ZElement; Letztes: ZElement; Element:TElement;
begin
NEW(X);
NEW(Y);
Element.daten:=eintrag;
Element.Naechstes:=X;
Element.Voriges:=Y;
if (Erstes <>
nil)
then
begin
Letztes := Erstes;
while (Letztes^.Naechstes <>
nil)
do
Letztes := Letztes^.Naechstes;
Letztes^.Naechstes := @Element;
Element.Naechstes :=
nil;
Element.Voriges := Letztes;
end else
begin
Erstes := @Element;
//hier ist Element noch zb. ('bla',#ECF45G,#ECF45H)
Element.Naechstes :=
nil;
//hier auch (außer das neue nil)
Element.Voriges :=
nil;
//hier auch (außer das neue nil)
end;
//hier ist Element jetzt ('',nil,nil)
end;
Er zeigt keine Fehler mehr an oder so, ein Test-Programm läuft auch, aber spätestens bei der Pop-funktion gibts Ärger.
Ich hab dann mal mit F7 durchgeschaltet und hab ne Watchlist gemacht und bin zu folgender interessanter Sache gekommen: schon beim ersten push (also wenn erstes noch nil ist) passiert etwas Seltsames: wenn man bei "Erstes := @Element;" steht Element noch auf ('eingegebener string, adresse, adresse). Wenn er aber die nächsten 2 Zeilen durchlaufen hat und die beiden Adressen nil sind, hat sich plötzlich auch Element.daten verändert: von einer Zeile zur anderen ist Element plötzlich ('',nil,nil).
Außerdem stand bei der Watchlist auch einmal "Variable "Self" inaccessible here due to optimization". Ich hab doch gar keine Variable Self???
Die Delphi-Hilfe und Forum-Suche haben mir leider gar nicht weitergeholfen, aber schonmal vielen Dank für eure Mühe und Entschuldigung für die dämlichen Fragen und alles
Viele Grüße und einen schönen Abend noch
der Pellekaeptn