kann es sein, dass Listen in Purebasic nicht ganz Pointer-gerecht aufgeteilt sind? Theretisch müsste ich ja bei mehreren, hintereinandern allozierten Listeneinträgen auch aufeinanderfolgende Speicheradressen haben. Dem ist leider nicht so, weshalb ich mir ein wenig sorgen über die Multifunktionalität meine Effekt-Funktionen in einem Spiel mache. Kleiner Beispielcode:
Code: Alles auswählen
Structure pups
menge.b
stufe.b
von.s
EndStructure
NewList pupse.pups()
Define.pups *P
Macro printpups
PrintN("pups von " + *p\von)
PrintN("anzahl: " + Str(*p\menge))
Print("Fazit: ")
Select *p\stufe
Case 0: PrintN("nur heiße luft...")
Case 1: PrintN("nett flauschig")
Case 2: PrintN("alle achtung...")
Case 3: PrintN("woaaaahhww O°.°O")
EndSelect
EndMacro
AddElement(pupse())
pupse()\menge = 1
pupse()\stufe.b = 1
pupse()\von = "mama"
AddElement(pupse())
pupse()\menge = 1
pupse()\stufe.b = 2
pupse()\von = "papa"
AddElement(pupse())
pupse()\menge = 3
pupse()\stufe.b = 3
pupse()\von = "baby"
OpenConsole()
FirstElement(pupse())
*p = @pupse()
printpups
;{ fehler-prüf-ausgabe -> pointer geht um 24 byte weiter!
Debug "größe von pups: " + Str(SizeOf(pups))
Debug "pointer: " + Str(*p)
NextElement(pupse())
Debug "liste: " + Str(@pupse())
;}
*p + SizeOf(pups)
printpups
;{ fehler-prüf-ausgabe -> pointer geht um 24 byte weiter!
Debug "größe von pups: " + Str(SizeOf(pups))
Debug "pointer: " + Str(*p)
NextElement(pupse())
Debug "liste: " + Str(@pupse())
;}
*p + SizeOf(pups)
printpups
;{ fehler-prüf-ausgabe -> pointer geht um 24 byte weiter!
Debug "größe von pups: " + Str(SizeOf(pups))
Debug "pointer: " + Str(*p)
NextElement(pupse())
Debug "liste: " + Str(@pupse())
;}
Structure pups
menge.b
stufe.b
von.s
X.b oder X.w
EndStructure
gibts 24 bytes. Aber wenn ich ein Long nehme, sinds plützlich 8 byte mehr... Lustigerweise wird ab einem "X.w" auch der zweite Eintrag ausgegeben, was ansich seltsam ist -> da ja konstant 24 byte unterschied sind. Zufall? kA. Ich hätte ganz einfach eine konstante Bytegröße zum Pointer pro Eintrag zugerechnet, aber das klappt nicht, da bei weiteren Struktureinträgen dieser Abstand auch verändert wird.
Hilfe