Problem: TMap Inhalt verschwindet ! :-(
Übersicht

AvaGastBetreff: Problem: TMap Inhalt verschwindet ! :-( |
![]() Antworten mit Zitat |
|
---|---|---|
Ich bin gerade auf ein sonderbares Phänomen gestossen: Mein TMap Objekt verliert plötzliche Values für Keys. ![]() Zur Analyse habe ich mir den Bereich rausgenommen und durch einige Debuglogs ergänzt. Der Programmteil macht nicht viel: MapInsert ( map, key, value ) ... und dann den Inhalt von der TMap im Debuglog auflisten. Das Ergebnis ist ne ziemlich lange Liste, von der ich euch mal einen Problembereich kopiere. Der Anfang klappt wunderbar ... und dann plötzlich verschwindet WISDOM. ![]() Code: [AUSKLAPPEN] [..]
DebugLog:ADD: CLASS_BASE = Abenteurer DebugLog: GER: CLASS_BASE Abenteurer DebugLog: GER: DEXTERITY Geschick DebugLog: GER: PERCEPTION Wahrnehmung DebugLog: GER: STRENGTH Stärke DebugLog: GER: TOUGHNESS Zähigkeit DebugLog: GER: WILLPOWER Willenskraft DebugLog: GER: WISDOM Weisheit --- DebugLog:ADD: 01221660 = Abenteuer DebugLog: GER: CLASS_BASE Abenteurer DebugLog: GER: DEXTERITY Geschick DebugLog: GER: PERCEPTION Wahrnehmung DebugLog: GER: STRENGTH Stärke DebugLog: GER: TOUGHNESS Zähigkeit DebugLog: GER: WILLPOWER Willenskraft DebugLog: GER: WISDOM Weisheit DebugLog: GER: 01221660 Abenteuer --- DebugLog:ADD: 01221690 = Krieger DebugLog: GER: CLASS_BASE Abenteurer DebugLog: GER: DEXTERITY Geschick DebugLog: GER: PERCEPTION Wahrnehmung DebugLog: GER: STRENGTH Stärke DebugLog: GER: TOUGHNESS Zähigkeit DebugLog: GER: WILLPOWER Willenskraft DebugLog: GER: WISDOM DebugLog: GER: 01221660 Abenteuer DebugLog: GER: 01221690 Krieger [..] Noch krasseres Beispiel: Code: [AUSKLAPPEN] [..]
DebugLog:ADD: 01AF1660 = Abenteuer DebugLog: GER: CLASS_BASE Abenteurer DebugLog: GER: DEXTERITY Geschick DebugLog: GER: STRENGTH Stärke DebugLog: GER: TOUGHNESS Zähigkeit DebugLog: GER: 01AF1660 Abenteuer [..] DebugLog:ADD: 01AF16F0 = Jäger DebugLog: GER: CLASS_BASE Abenteurer DebugLog: GER: DEXTERITY Geschick DebugLog: GER: STRENGTH Stärke DebugLog: GER: TOUGHNESS DebugLog: GER: 01AF1660 Abenteuer DebugLog: GER: 01AF1690 Krieger DebugLog: GER: 01AF16C0 Schurke DebugLog: GER: 01AF16F0 Jäger [..] DebugLog:ADD: 01AF1720 = Magier DebugLog: GER: CLASS_BASE DebugLog: GER: DEXTERITY DebugLog: GER: STRENGTH DebugLog: GER: TOUGHNESS DebugLog: GER: 01AF1660 Abenteuer DebugLog: GER: 01AF1690 Krieger DebugLog: GER: 01AF16C0 Schurke DebugLog: GER: 01AF16F0 Jäger DebugLog: GER: 01AF1720 Magier [..] Hat dafür ein erfahrener TMap-User womöglich eine Erklärung? ![]() |
||
![]() |
ChaosCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kannst du die Situation mit einem kleinen Codebeispiel nachstellen? Oder tritt das sonst nicht auf?
Ich denke nicht, dass es an der TMap-Klasse liegt... aber das weiß ich auch nich so genau. |
||
Projekte: Geolaria | aNemy
Webseite: chaosspace.de |
![]() |
kog |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm hat es vielleicht etwas damit zu tun, das seit dem Update keine Null Instancen mehr erlaubt sind und diese glaub auch automatisch rauswirft? | ||
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Ich habe etwas rumprobieren müssen, bis ich es rekonstruieren konnte. Ich habe das Gefühl, dieses Problem taucht nur auf, wenn ich Strings mit anderen Objekten in einer TMap mische?! ![]() ![]() Code: [AUSKLAPPEN] SuperStrict Framework BRL.MAP Global MAP:TMap = CreateMap ( ) MapInsert ( MAP, "AAA", "aaa" ) DEBUG ( ) MapInsert ( MAP, "BBB", "bbb" ) DEBUG ( ) For Local i:Int = 0 To 3 MapInsert ( MAP, CreateMap ( ), String ( i ) ) DEBUG ( ) Next MapInsert ( MAP, "CCC", "ccc" ) DEBUG ( ) MapInsert ( MAP, "DDD", "ddd" ) DEBUG ( ) Function DEBUG ( ) DebugLog ( "" ) For Local KEY:Object = EachIn MapKeys ( MAP ) Local VALUE:Object = MapValueForKey ( MAP, KEY ) If VALUE DebugLog ( "KEY: " + KEY.tostring ( ) + " VALUE: " + VALUE.tostring ( ) ) Else DebugLog ( "KEY: " + KEY.tostring ( ) + " [ FAILED ]" ) EndIf Next DebugLog ( "" ) EndFunction REesultat: Code: [AUSKLAPPEN] DebugLog:
DebugLog:KEY: AAA [ FAILED ] DebugLog:KEY: BBB [ FAILED ] DebugLog:KEY: 00FB0BE0 VALUE: 0 DebugLog:KEY: 00FB1090 VALUE: 1 DebugLog:KEY: 00FB16B0 VALUE: 2 DebugLog:KEY: 00FB1E40 VALUE: 3 DebugLog:KEY: CCC VALUE: ccc DebugLog:KEY: DDD VALUE: ddd DebugLog: @kog Null Instancen sind keine dabei (jedenfalls nicht gewollt ^^). Abgesehen davon bin ich noch bei v1.30, weisste doch. ![]() |
||
klepto2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Da scheint ein bug im GC zu sein. im Threaded Modus funktioniert es einwandfrei.
Das Problem liegt anscheined darin, das Pointer mit derselben Adresse erzeugt werden, wie die beiden vorigen für AAA und BBB, ich habe im Moment keine Ahnung warum. Vielleicht mal im Bug forum auf bb.com posten. |
||
Matrix Screensaver
Console Modul für BlitzMax KLPacker Modul für BlitzMax HomePage : http://www.brsoftware.de.vu |
![]() |
amon |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kann ich bestätigen, aber auch im Threaded Modus läufts bei mir nicht einwandfrei - in der letzten Iteration der Debug Funktion geht das vierte und letzte Value Element verloren das einen Map als Key bekommt.
Fügt man als Key nur Strings ein, tritt der Fehler sowohl bei Threaded / Nicht Threaded nicht auf. Den Fehler kann man auch mit anderen Types als Key provozieren. |
||
klepto2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wie schon erwähnt, bei mir funktioniert das ganze im threaded Modus einwandfrei. Gut, die Reihenfolge ist halt ne andere, das liegt aber an den interna von TMap und den Pointern. | ||
Matrix Screensaver
Console Modul für BlitzMax KLPacker Modul für BlitzMax HomePage : http://www.brsoftware.de.vu |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Antwort aus dem BB.com-Bugforum für alle interessierten:
Zitat: The problem is that Objects by default (and TMaps) have their Compare method implemented using their addresses, whereas Strings override that with a character-based implementation. When you mix those two types of objects as keys, it is possible that obj1 < str1 < str3, but str3 < obj1. That messes up the map.
In math-speak, the set of all strings is an ordered set, as is the set of all TMap objects. However, the union of those is not an ordered set. Thus, it cannot be sorted, which is what a map does (tries). Edit: In short - not allowed. Not a bug - a feature ![]() |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Tolles "Feature" ... ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group