![]() |
Zugriffsverletzung beim TObjectDictionary.Add
Hallöle...:P
Ich verstehe die Welt nicht mehr...:roll:
Delphi-Quellcode:
TUserRoleRightDict = TObjectDictionary<Integer, TUserRoleRight>;
... UserRight := TUserRoleRight.Create; UserRight.RightID := StrToInt(ContentList[0]); ... FModifiedUserRole.RoleRightList.Add(UserRight); FModifiedUserRole.RoleRightDict.Add(UserRight.RightID, UserRight); Zitat:
PS: Die Liste enthällt das korrekte Objekt. Danke für Infos...:wink: |
AW: Zugriffsverletzung beim TObjectDictionary.Add
Ich tipp mal auf nen falschen Konstruktoraufruf durch die ganzen Overloads beim TDictionary, so dass FComparer nil ist. :glaskugel:
Was sonst soll ne AV beim Lesen von Adresse 00000000 in der Methode Hash verursachen :gruebel: |
AW: Zugriffsverletzung beim TObjectDictionary.Add
RoleRightDict.Create, statt RoleRightDict := TUserRoleRightDict.Create?
Zeig uns doch mal den Code wo das Dictionary erstellt wird. |
AW: Zugriffsverletzung beim TObjectDictionary.Add
Bitteschön...:P
Delphi-Quellcode:
Wer meinen dusslichen Fehler findet...dem gebe ich ein :cheers: aus...
FRoleRightDict := TUserRoleRightDict.Create; // Dict ohne Freigabe (sortierte Liste RoleRightList)
FRoleRightList := TUserRoleRightList.Create; // List gibt Objekte frei ... FRoleRightDict := TUserRoleRightDict.Create([doOwnsValues]); // gleicher Fehler FRoleRightList := TUserRoleRightList.Create(False); Nachtrag: FComparer ist nil. :shock: |
AW: Zugriffsverletzung beim TObjectDictionary.Add
- Stoppunkt nach dem Create und schauen, ob FRoleRightDict.FComparer assigned ist.
- Schauen, ob es nicht aus Versehen irgendwo freigegeben wird bevor der Add Aufruf passiert. P.S. Ich glaub, ich mach mal für die Forentage 2020 einen "Fehleranalyse 101" Vortrag 8-) |
AW: Zugriffsverletzung beim TObjectDictionary.Add
Zitat:
Ich verwende Dictionaries ständig. Einen Comparer habe ich noch nie benutzt. Ich erstelle die Instanz wie immer meistens mit [doOwnsValues]. Danke... Nachtrag: * Nach dem Create ist der Comparer Assigned (Pointer($3BFEF6C) as {System.Generics.Defaults}IEqualityComparer<System .Integer>) * vor dem Add ist der Comparer Assigned (nil) -> dazwischen passiert mit dem Dict nix. Das Dict wird erzeugt und dann beschrieben. :? Eine Idee habe ich noch...aber erst morgen früh. |
AW: Zugriffsverletzung beim TObjectDictionary.Add
Zitat:
Es geht nur darum, dass wenn bestimmte grundlegenden Dinge schon vorab passiert sind (und das ist nun keineswegs nur auf dich und diesen Fall bezogen) man entweder schon selbst drauf kommt oder es anderen erleichtert, Hilfe zu leisten. Das ist glaube ich, im Interesse aller. Ist wie mit dem Fisch geben oder Angeln beibringen. Klar, wenn man keine Lust oder Zeit auf Angeln hat, kann man auch andere nach nem Fisch fragen (oder man kauft ihn im Supermarkt) :roll: Punkt ist, dass man keinen comparer angeben muss, der wird intern gebaut/bezogen. Wenn der also plötzlich nil ist, kann es sich nur um Vorzeitiges Freigeben des Dictionaries handeln oder was ich eher für unwahrscheinlich halte Speicherüberschreiben dieses Objekts durch eine andere Stelle. |
AW: Zugriffsverletzung beim TObjectDictionary.Add
Und was ist "TSEAMUserRoleRightDict"? Ist das immer noch ein Alias? Oder eine eigene Unterklasse welche z.B. nur "inherited" oder "inherited Create" im Konstruktor sagt?
Ein Codeschnippsel zum Nachstellen wäre echt super-hilfreich. |
AW: Zugriffsverletzung beim TObjectDictionary.Add
TSEAMUserRoleRightDict war ein Tippfehler.
Korrekt wäre wie in den Codeschnippseln TUserRoleRightDict. Danke... |
AW: Zugriffsverletzung beim TObjectDictionary.Add
Moin...8-)
Zitat:
Danke für eure Hilfe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:40 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-2025 by Thomas Breitkreuz