Update:
Memory Leak tritt nun nur noch auf, wenn das letzte element ausgewählt wird.
Neuer Code:
Delphi-Quellcode:
Function Tmtflist2.Getitem(Const Index: Cardinal): Plistfield;
Begin
Tmp := Inherited;
Mtf(Tmp);
Result := Tmp;
End;
Procedure Tmtflist2.MTF(Item: Plistfield);
// leaks 12 byte if item is last
Var
Islast: Boolean;
Begin
Islast := Item^.Fnext = Nil;
Try
Tmp := Item;
If Not Islast Then
Begin
Dispose(Item^.Fnext^.FPrev);
Item^.Fnext^.FPrev := Item^.FPrev;
End
Else // islast: error
Begin
Lst := Item^.FPrev;
Lst^.Fnext := Nil;
End;
If Item^.Fprev <> Nil Then
Item^.FPrev^.Fnext := Item^.Fnext;
Finally
Item^.FPrev := Nil;
Item^.Fnext := Nil;
End;
If Fst^.Fnext <> Nil Then
Fst^.Fnext^.Setprevious(Item);
Item^.Setprevious(Fst);
End;