AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TObjectList - Sort crash (D7)

Ein Thema von o-sch · begonnen am 11. Mär 2008 · letzter Beitrag vom 10. Feb 2009
 
o-sch

Registriert seit: 18. Okt 2006
Ort: Essen
11 Beiträge
 
Delphi XE2 Enterprise
 
#1

TObjectList - Sort crash (D7)

  Alt 11. Mär 2008, 14:40
Hallo !

Ich habe hier eine abgeleitete TObjectList die ich mit eigenen Objekten befülle:
(Der Code ist frisiert, damit ich das Problem einfacher darstellen kann)

Delphi-Quellcode:
  
function TMyItemList.NewMyItem(a1,a2,a3:Integer):TmyItem;
begin
  Result := NIL;
  Result := TmyItem.Create(Self);
  Result.V1 := a1;
  Result.V2 := a2;
  Result.V3 := a3;
  Self.Add(Result);
end;
Soweit so gut ... Ich kann ohne Probleme auf die Objekte zugreifen:

Delphi-Quellcode:

procedure TmyItemList.SchleifMich;
var i:Integer;
begin
  for i := 0 to Self.Count-1 do
  begin
    if TmyItem(Items[i]).V1 > 0 then
      beep;
  end;
end;

Aber: Versuche ich zu sortieren bekomme, ich eine Zugriffsverletzung.
Ich würde ja vermuten, daß ich nur "gültige" Pointer also vom passenden Typ (TmyItem) in der Funktion vorfinde.
Schließlich gib es nur die eine Funktion um Objekte zuzufügen.
Das ist auch in 99% der Fälle so ... dann plötzlich finde ich einen Pointer der ins Nichts zeigt.


Delphi-Quellcode:
  
  function MyListCompare(pmyItem1, pmyItem2: pointer): integer;
  begin
    Result := 0
    if TmyItem(pmyItem).V1 > TmyItem(pmyItem).V2 then Result := 1;
    if TmyItem(pmyItem).V1 < TmyItem(pmyItem).V2 then Result := -1;
  end;


  procedure TMyItemList.DoSort
  begin
    Self.Sort(MyListCompare);
  end;

Meine Vermutung ... ich mache was beim Erzeugen falsch.
Die Funktion NewMyItem wird einmal von außen gecallt und einmal über eine Funktion im Objekt:

Delphi-Quellcode:
  Procedure TmyItemList.AddMySpecialItem;
  begin
    Self.NewMyItem(1,2,3);
  end;
versus

Delphi-Quellcode:
  procedure fmain.CallIt
  begin
    getMyItemList.NewItem(99,88,77);
  end;

Sollte doch eigentlich keinen Unterschied machen.

Ich bin ratlos help, please
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz