Einzelnen Beitrag anzeigen

Sequitar

Registriert seit: 8. Jan 2016
74 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Move to Front Doppelt Verkettete Listen

  Alt 10. Jan 2016, 00:25
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;

Geändert von Sequitar (10. Jan 2016 um 00:33 Uhr)
  Mit Zitat antworten Zitat