Hallo und

in der EE,
zuerst einmal: die 3 Zeilen die den Zeiger verbiegen sind imho korrekt (ich sehe zu mindestens gerade keinen Fehler). Aber ein ganz paar Kommentare zum Quelli habe ich doch

.
dr.eichhoernchen hat folgendes geschrieben : |
Delphi-Quelltext 1:
| constructor create(z:integer);virtual; | |
Wenn ich mich recht entsinne (arbeite mit Delphi inzwischen seit ~2 Jahren fast gar nicht mehr) ist virtual an der Stelle falsch. Wenn du es implementieren willst dann musst du schon override nehmen, da der constructor und destructor ja schon bei TObject definiert ist (wobei wenn ich mich sogar richtig entsinne: den TObject-Konstruktor musste man nicht überschreiben, aber den TObject-Destructor - schaue einfach mal auf die Hinweise). Und wenn du das Create gar nicht brauchst (also auch keine Methoden direkt am Objekt), nimm ein Record. Spart ein paar CPU-Takte. Da wir gerade bei den Objekten sind: wenn ich mich Recht entsinne musste man auch bei Klassen mit
GetMem(ory) bzw.
FreeMem arbeiten, damit es nicht zu problemen kommt (willkürlicher Inhalt der Objekte). Womöglich liegt bei dir da ein Fehler. (Wie gesagt: bin mir da nimmer sicher)
dr.eichhoernchen hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| if l<=1 then begin anfang.free; anfang:=nil; ende:=nil; aktuell:=nil; l:=0; end; | |
Das ergibt ein schönes Speicherleck. Du löschst die ganze Liste in dem du das erste Element löschst. Was macste mit den anderen? Die liegen noch fein im RAM rum - bis das Programm beendet wird

. Und gleich noch etwas: wenn ein ungültiger Wert übergeben wird, z.B. -1, lösche nicht gleich die ganze Liste, sondern gib ne Fehlermeldung mittels
raise zurück. Wenn du unsauberen Code erlaubst, coden die Entwickler auch unsauber. Also sorge lieber dafür das es sauber ist

.
Es gibt
else
Was macht diese Funktion?
dr.eichhoernchen hat folgendes geschrieben : |
Delphi-Quelltext 1:
| for j:=0 to (i-1) do begin | |
Nur ein kleiner Tipp (ist Geschmackssache): für den Menschen ist es besser lesbar 1 bis i, statt 0 bis i-1, da du auch sagst 1. Element ist das erste Element im Speicher. Falls es deine Spezifikation erlaubt: starte bitte bei Listen bei 0 und nicht bei 1. Ist in der Entwicklung eigentlich allgemein üblich das 0 das erste Element ist und -1 ein ungültiges. Ein gemische aus beiden verkompliziert das ganze nur unnötig (Strings in Delphi sind mit dem StartIndex von 1 eine ausnahme, da historisch bedingt früher das erste Byte die Stringlänge beinhaltete).
Nur ein kleiner Tipp falls du es noch nicht kennst:
dec(l); macht das gleiche wie
l:=l-1 (vor allem bei längeren Variablen er höht es die Übersichtlichkeit - ist aber auch wieder Geschmacksache).
Ansonsten: Fehler sehe ich erst einmal keine