Forum: Object-Pascal / Delphi-Language
Delphi
by SirThornberry,
18. Nov 2006
biem Freigeben spielt es keine Rolle ob man Dispose den richtigen Typ übergibt. Denn beim Freigeben wird einfach geprüft ob die übergebene Speicheradresse vorher allociert wurde. Wenn dem der Fall ist werd auch genau dieser Speicherblock wieder frei gegeben.
Forum: Object-Pascal / Delphi-Language
Delphi
by SirThornberry,
17. Nov 2006
bei meinem Clear wird die Schleife nur einmal durchlaufen da Clear der eigentlichen TList nicht item für item frei gibt sondern die größe der Liste mit einem mal ändert.
Forum: Object-Pascal / Delphi-Language
Delphi
by SirThornberry,
17. Nov 2006
schau dir mal dein neues Clear an, dein "i" ist dort fehl am Platz.
Und in der SetMethode ist das freigeben überflüssig. Du gibst dort speicher frei und forderst sofort danach neuen Speicher an. Sinnvoller wäre es den einmal reservierten Speicher weiter zu nutzen.
PRect(inherited Items)^ := AItem;
und zu deinem Clear. Es geht auch so
var i: Integer;
begin
for i := 0 to Count - 1 do
Forum: Object-Pascal / Delphi-Language
Delphi
by SirThornberry,
17. Nov 2006
dein Clear müsste irgendwann ein "Index out of Bounds" bringen weil du die Schleife vorwärts laufen lässt aber die Elemente der reihe nach löschst. Somit werden es immer weniger Items pro Durschlauf und die letzten Schleifendurchläufe klappen nicht mehr.
Deine Methode SetItems macht überhaupt keinen Sinn, denn AItem liegt auf dem Stack und ist nach verlassen der Methode nicht mehr gültig. Somit...