Ich hab schon seit einiger zeit ein Brett vorm Kopf und komm selber nicht auf den Fehler, daher bitte ich euch, mir zu helfen.
Also, hier ist meine Stack-Include (von mir nach PB übersetzt, Quelle ist die Musterlösung einer C-Hausübung)
Code: Alles auswählen
EnableExplicit
Macro _ret
ProcedureReturn
EndMacro
Structure Stack
*Val
*Next.Stack
EndStructure
Procedure InitStack()
Protected.Stack *Temp
*Temp = AllocateMemory(SizeOf(Stack))
_ret *Temp
EndProcedure
Procedure CountStack(*Stack.Stack)
Debug "____Called."
Protected.Stack *Temp
Protected.i Count
If *Stack = #Null : _ret 0 : Else
*Temp = *Stack\Next
While *Temp <> #Null
Debug "____Inner Loop"
Count = Count + 1
*Temp = *Temp\Next
Wend
Debug "____Outer Loop"
_ret Count
EndIf
EndProcedure
Procedure IsStackEmpty(*Stack.Stack)
_ret (CountStack(*Stack) = 0)
EndProcedure
Procedure Push(*Stack.Stack, *Item)
Protected.Stack *Temp
If *Stack = #Null : _ret #False : Else
*Temp = InitStack()
*Temp\Val = *Item
*Temp\Next = *Stack\Next
*Stack\Next = *Temp
_ret #True : EndIf
EndProcedure
Procedure Pop(*Stack.Stack)
Protected.Stack *Temp
Protected *VAL0__
If IsStackEmpty(*Stack) Or *Stack = 0 : _ret #False : Else
*Temp = *Stack\Next
*VAL0__ = *Temp\Val
*Stack\Next = *Temp\Next
FreeMemory(*Temp)
_ret *VAL0__ : EndIf
EndProcedure
Procedure FreeStack(*Stack.Stack)
FreeMemory(*Stack)
EndProcedure
Define.Stack *MyStack = InitStack() ;Aufruf OK
Define.i Item = 5
Debug Push(*MyStack,@Item) ;Rückgabewert ist 1 => Aufruf OK
Debug "---"
Debug Pop(*MyStack) ;Rückgabewert ist eine Adresse => Aufruf OK
FreeStack(*MyStack) ;Aufruf OK
Debug "---" ;Das wird noch gedruckt
Debug IsStackEmpty(*MyStack) ;Hier wird aufgrund des Aufrufs von IsStackEmpty() und weiters durch den Aufruf von CountStack() nichts ausgegeben.
Debug Push(*MyStack,@Item)