Hallo!
Ich hab gerade einen etwas älteren Stack-Code ausgegraben. Relativ wenig und übersichtlich aber trotzdem überall Fehler. Folgender Code kann an der markierten Stelle nur 520 mal Push durchführen, bevor das Programm abstürtzt. Irgendwie logisch, da das Array dynamisch sein sollte und ich weder einen ReAlloc noch ein ReDim anwende, was den Grund hat, dass mein Programm gleich abstürzt, wenn ich eines von beiden in meinen Code schreibe.
Structure Stack
Size.i
Array *SArray(0)
EndStructure
Procedure NewStack()
Protected.Stack *this
*this = AllocateMemory(SizeOf(Stack))
*this\SArray() = AllocateMemory(SizeOf(Integer))
If (Not *this) Or (Not *this\SArray())
ProcedureReturn #False
EndIf
ProcedureReturn *this
EndProcedure
Procedure Stack_Push (*this.Stack, *Value)
*this\Size + 1
;sollte hier nicht ReDim bzw. ReAlloc rein? ich hab folgendes probiert (nicht gleichzeitig):
;ReDim *this\SArray(*this\Size)
;ReAllocateMemory(*this\SArray(),SizeOf(*this\SArray)*SizeOf(*this\Size))
*this\SArray(*this\Size) = *Value
ProcedureReturn
EndProcedure
Procedure Stack_Pop (*this.Stack)
*this\Size - 1
ProcedureReturn *this\SArray(*this\Size)
EndProcedure
Procedure Stack_Free (*this.Stack)
FreeMemory(*this) : *this = #Null
FreeArray(*this\SArray()) : *this\SArray() = #Null
ProcedureReturn
EndProcedure
;*********
Define.Stack *st = NewStack()
For i = 0 To 1000
Debug i ; gibt die Zahlen von 0 bis 519 aus, dann Absturz
Stack_Push(*st,@i)
Next i
For i = 0 To 1001
Debug PeekI(Stack_Pop(*st))
Next i
Stack_Free(*st)
Edit: Vor C-Arrays in Structs halte ich mich distanziert... die sind so komisch
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
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.
InitializeStructure()
wasn das?
*in Hilfe nachles*
Aah, ok. Bis jetzt habe ich nur sehr beschränkt mit Structs gearbeitet (Arrays, Maps und Lists überhaupt nicht und Pointer auf strukturierte "Objekte" waren eine Rarität). Da ist viel nachholbedarf
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl