Thema: Delphi Pointer-Problem

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

AW: Pointer-Problem

  Alt 26. Jan 2012, 21:56
So, hier erstmal der Comparer mit einer ordentlichen Typkonvertierung
Delphi-Quellcode:
function ListSortCompetitors(Item1, Item2: Pointer): Integer;
var
  C1, C2: TodCompetitor;
begin
  C1 := TObject(Item1) as TodCompetitor;
  C2 := TObject(Item2) as TodCompetitor;
  Result := CompareValue(C2.GameParty.PlayerList.Count, C1.GameParty.PlayerList.Count);
  if Result = 0 then
    Result := Random(3) - 1;
end;
Delphi-Quellcode:
function ListSortCompetitors(Item1, Item2: Pointer): Integer;
begin
  Result := CompareValue((TObject(Item2) as TodCompetitor).GameParty.PlayerList.Count,
                         (TObject(Item1) as TodCompetitor).GameParty.PlayerList.Count);
  if Result = 0 then
    Result := Random(3) - 1;
end;
Ansonsten ist die Unterschreidung nach Speicheradresse kommplett falsch gedacht, denn die Verteilung im Speicher ist willkürlich und wie schon erwähnt, sind Werte über $10000000 vollkommen plausibel und definitiv kein Erkennungsmerkmal für einen "defekten" Pointer. (vorallem wenn dein Arbeitsspeicher mal etwas voller wird).

Wenn bei dieser Funktion Zeiger defekt sind, dann sind vermutlich die schon die Zeiger defekt, welche sich in deiner Liste befinden.

Liegt es nicht an der Liste liegt, dann könnte es höchstens noch daran liegen, daß deine Zufallswerte den Sortieralgo durchdrehen lassen und dieser z.B. über die Arraygrenzen seiner Liste hinausläuft.
Aber auch das dürfte nicht passieren und ich würde sowas dann eher als einen Bug im Sortieralgorithmus abstempeln.
(auch wenn es nicht so einfach ist, wenn man versucht sich ständig verändernde Werte zu sortieren, welche sich wärend des Sortierens verändern, ohne daß man sie vorher zwischenspeichert)
$2B or not $2B
  Mit Zitat antworten Zitat