Seite 1 von 2
Bug bei verwendung von Pointern auf Maps
Verfasst: 08.02.2011 11:02
von cxAlex
Code: Alles auswählen
Structure myStruct
item1.i
item2.i
EndStructure
NewMap myMap.i()
;myMap("haha")
*p1.Integer = @myMap("haha")
*p1\i = 12
Debug myMap("haha")
Debug myMap("blub")
Debug myMap("brummmm")
Der Pointer setzt jedes Element der Map, ausßer wenn der auskommentierte Map-Aufruf getätigt wird.
Gruß, Alex
Re: Bug bei verwendung von Pointern auf Maps
Verfasst: 08.02.2011 12:13
von STARGÅTE
Ich stimme zu das es wohl ein Bug ist, jdoch wäre eine Saubere Lösung an dieser Stelle eh ratsammer:
Code: Alles auswählen
NewMap myMap.i()
*p1.Integer = AddMapElement(myMap(), "haha")
*p1\i = 12
Debug myMap("haha")
Debug myMap("blub")
Debug myMap("brummmm")
Diesem "on-the-fly" Definieren von Elementen einer Map habe ich noch nie und werde ich auch nie vertrauen.
Interessant ist vorallem, das die ganzen Elemente alle auf den selben Pointer verweisen, und
keines von den Elementen überhaupt definiert wurde!
Code: Alles auswählen
NewMap myMap.i()
*p1.Integer = @myMap("haha")
*p1\i = 12
Debug @myMap("haha")
Debug @myMap("blub")
Debug @myMap("brummmm")
ForEach myMap()
Debug MapKey(myMap())
Next
Re: Bug bei verwendung von Pointern auf Maps
Verfasst: 08.02.2011 14:01
von PMV
Ich denke auch genau da ist der tatsächliche Bug:
Code: Alles auswählen
NewMap myMap.i()
Debug @myMap("haha")
ForEach myMap()
Debug MapKey(myMap())
Next
Zusammenwürfeln des @-Symbols und definieren eines neuen
Map-Elements führen bei PB wohl zu heftigen verwirrungen,
wodurch erst garkein Element erstellt wird.
Das funzt so prima:
Code: Alles auswählen
NewMap myMap.i()
myMap("haha")
Debug @myMap()
myMap("lol")
Debug @myMap()
ForEach myMap()
Debug MapKey(myMap())
Next
Musst es nur noch ins englische Forum posten.
MFG PMV
Re: Bug bei verwendung von Pointern auf Maps
Verfasst: 08.02.2011 14:32
von cxAlex
Schon geschehen
Gruß, Alex
Re: Bug bei verwendung von Pointern auf Maps
Verfasst: 08.02.2011 15:03
von ts-soft
PureBasic.chm hat geschrieben:Hinweis: Diese Funktion ist nicht zwingend beim Umgang mit Maps, da Elemente automatisch hinzugefügt werden, wenn ihnen ein Wert zugewiesen wird.
Das geschieht aber IMHO in eurem Code nicht.
Re: Bug bei verwendung von Pointern auf Maps
Verfasst: 08.02.2011 15:36
von cxAlex
ts-soft hat geschrieben:PureBasic.chm hat geschrieben:Hinweis: Diese Funktion ist nicht zwingend beim Umgang mit Maps, da Elemente automatisch hinzugefügt werden, wenn ihnen ein Wert zugewiesen wird.
Das geschieht aber IMHO in eurem Code nicht.
Wenn man das @ wegläst wird aber trotzdem ein Wert angelegt. Auch wenn du keinen Wert zuweist.
Gruß, Alex
Re: Bug bei verwendung von Pointern auf Maps
Verfasst: 08.02.2011 15:46
von ts-soft
cxAlex hat geschrieben:Wenn man das @ wegläst wird aber trotzdem ein Wert angelegt. Auch wenn du keinen Wert zuweist.
Das ändert aber nichts daran, das es kein Bug ist, bloß weil etwas undokumentiertes augenscheinlich
funktioniert

Re: Bug bei verwendung von Pointern auf Maps
Verfasst: 08.02.2011 16:48
von STARGÅTE
Dort steht aber wirklich eindeutig: "wenn ihnen ein Wert zugewiesen wird."
DENN!
selbst wenn ich ein "unbekanntes" Elemente auslesen, wird es nicht angelegt...
da stellt sich die frage, woher kommt der Wert?
Das würde zudem erklären warum alle Debugs auf einmal 12 hatten:
Code: Alles auswählen
NewMap myMap.i()
a = myMap("haha")
Debug a
Debug myMap("blub")
c = myMap("brummmm")+myMap("alpha")
Debug c
Debug "auslesen"
ForEach myMap()
Debug MapKey(myMap())
Next
Keines der Elemente wurde angelegt!
Ihn muss wirklich explizit ein Wert zugewiesen werden, ansonsten wird eine art "leerer" Speicher zurückgegeben, sowohl beim Auslesen, als auch mti Pointern.
Re: Bug bei verwendung von Pointern auf Maps
Verfasst: 08.02.2011 17:19
von PMV
ts-soft hat geschrieben:PureBasic.chm hat geschrieben:Hinweis: Diese Funktion ist nicht zwingend beim Umgang mit Maps, da Elemente automatisch hinzugefügt werden, wenn ihnen ein Wert zugewiesen wird.
Das geschieht aber IMHO in eurem Code nicht.

Stimmt, das steht ja auch noch gut versteckt bei AddMapElement().
Naja aber ausreichen tut mir dieser Eintrag erlich gesagt nicht. Denn
Code: Alles auswählen
NewMap MyMap.i()
MyMap("Key")
MyMap() = 30
Debug MyMap()
funktioniert auch wunderbar. Ich hät da lieber schon von fred/ freak ne
Bestätigung, dass es nen Bug oder garnicht gewollt ist. Im zweiten
Fall sollte die Hilfe für die Bibliothek dafür erweitert werden. Immerhin
werden die wenigstens erst die Hilfe zu AddMapElement() gründlich
studieren, bevor sie damit los legen. Und man vergisst so Kleinigkeiten
schnell.
MFG PMV
Re: Bug bei verwendung von Pointern auf Maps
Verfasst: 08.02.2011 17:44
von ts-soft
PMV hat geschrieben:
funktioniert auch wunderbar.
In der dritten Zeile ordnest Du ja auch einen Wert zu, davor ist es ungültig. Kannst ja mal davor ein Debug
einfügen, dann merkste es.