PokeS ohne AllocateMemory?
Verfasst: 04.01.2021 17:17
Hallo!
Ich dachte, ich hätte eine clevere Methode gefunden, um meinen Code einfacher und gleichzeitig flexibler zu machen, indem ich Pointer und Poke-Befehle verwende. Das hat auch so lange funktioniert, wie ich nur mit Zahlen gearbeitet habe. Bei der Verwendung von Strings bin ich auf zwei Probleme gestoßen.
Hier ist ein Beispiel-Code:
Problem Nr. 1:
@Settings\Name ist anfangs immer 0. @Settings\Name bekommt nur eine richtige Adresse im Speicher, wenn ich vorher etwas wie Settings\Name="irgendwas" ausführe. Das gilt aber komischwerweise nur für Strings. Settings\Speed ist zwar 0, aber @Settings\Speed nicht.
Problem Nr. 2:
Wenn ich hier PokeS(@Settings\Name, "Test") statt "Test" einen längeren Namen eingebe als oben bei Settings\Name="irgendwas" stürzt das Programm ab oder verhält sich seltsam. Ich nehme an, dass das daran liegt, dass Speicher überschrieben wird, der nicht überschrieben werden sollte.
Bei allen Beispielen, die ich hier im Forum gefunden habe, wird PokeS() immer in Verbindung mit AllocateMemory() verwendet. Mir ist aber nicht klar, wie man das in diesem Fall umsetzen kann.
Für Tipps, wie man den Code zum Laufen kriegen kann, wäre ich dankbar. Falls das überhaupt kein sinnvoller Ansatz ist, mit Variablen umzugehen, wäre ich auch für den Hinweis dankbar.
Ich dachte, ich hätte eine clevere Methode gefunden, um meinen Code einfacher und gleichzeitig flexibler zu machen, indem ich Pointer und Poke-Befehle verwende. Das hat auch so lange funktioniert, wie ich nur mit Zahlen gearbeitet habe. Bei der Verwendung von Strings bin ich auf zwei Probleme gestoßen.
Hier ist ein Beispiel-Code:
Code: Alles auswählen
Structure Settings
ZOffset.b
Name.s
Speed.i
EndStructure
Global Settings.Settings
; Ohne diese Zeile gehts nicht:
Settings\Name="irgendwas"
;==============================
PokeB(@Settings\ZOffset, 7)
PokeS(@Settings\Name, "Test")
PokeI(@Settings\Speed, 999)
OpenConsole("Zeiger")
PrintN(Settings\Name)
PrintN(Str(Settings\ZOffset))
PrintN(Str(Settings\Speed))
Input()
@Settings\Name ist anfangs immer 0. @Settings\Name bekommt nur eine richtige Adresse im Speicher, wenn ich vorher etwas wie Settings\Name="irgendwas" ausführe. Das gilt aber komischwerweise nur für Strings. Settings\Speed ist zwar 0, aber @Settings\Speed nicht.
Problem Nr. 2:
Wenn ich hier PokeS(@Settings\Name, "Test") statt "Test" einen längeren Namen eingebe als oben bei Settings\Name="irgendwas" stürzt das Programm ab oder verhält sich seltsam. Ich nehme an, dass das daran liegt, dass Speicher überschrieben wird, der nicht überschrieben werden sollte.
Bei allen Beispielen, die ich hier im Forum gefunden habe, wird PokeS() immer in Verbindung mit AllocateMemory() verwendet. Mir ist aber nicht klar, wie man das in diesem Fall umsetzen kann.
Für Tipps, wie man den Code zum Laufen kriegen kann, wäre ich dankbar. Falls das überhaupt kein sinnvoller Ansatz ist, mit Variablen umzugehen, wäre ich auch für den Hinweis dankbar.