Bug bei verwendung von Pointern auf Maps

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Bug bei verwendung von Pointern auf Maps

Beitrag 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
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Bug bei verwendung von Pointern auf Maps

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: Bug bei verwendung von Pointern auf Maps

Beitrag 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. :wink:

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Re: Bug bei verwendung von Pointern auf Maps

Beitrag von cxAlex »

Schon geschehen ;)

Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Bug bei verwendung von Pointern auf Maps

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Re: Bug bei verwendung von Pointern auf Maps

Beitrag 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
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Bug bei verwendung von Pointern auf Maps

Beitrag 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 :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Bug bei verwendung von Pointern auf Maps

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: Bug bei verwendung von Pointern auf Maps

Beitrag 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.
:oops: 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
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Bug bei verwendung von Pointern auf Maps

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten