Re: Variablen reseten
Verfasst: 27.04.2014 18:02
Der Punkt ist eher, dass deine DataSection-Variante ins Auge gehen kann, wenn man versucht Strings zu verändern. Die liegen nämlich in dem Fall nicht auf dem Heap, sondern auf dem Stack und da sollte man spätere dynamische Stringänderungen tunlichst vermeiden.
Das sieht man auch schon deutlich an stark unterschiedlichen Adressen:
So ist es korrekt:
Das sieht man auch schon deutlich an stark unterschiedlichen Adressen:
Code: Alles auswählen
Debug @"Statischer String"
Define s.s = "Dynamischer String"
Debug @sCode: Alles auswählen
;1. Eine Struktur mit allen Variablen
Structure vTable
EinInteger.i
EinByte.b
EinString.s
;...
EndStructure
;2a. Wir können alle Variablen im Programm speichern
DataSection
Default_Values:
Data.i 1337
Data.b 23
Data.i @"Hallo Welt!"
EndDataSection
*vars.vTable = AllocateMemory(SizeOf(vTable))
CopyStructure(?Default_Values, *vars, vTable)
Debug *vars\EinInteger
Debug *vars\EinByte
Debug *vars\EinString
*vars\EinString = "Neuer viel längerer String um zu sehen, dass nichts passiert, weil dieser Strings sich in einem ganz anderen Speicherbereich befindet wie der ursprüngliche in der DataSection."
Debug *vars\EinString
;Zurücksetzen
CopyStructure(?Default_Values, *vars, vTable)
Debug *vars\EinInteger
Debug *vars\EinByte
Debug *vars\EinString