If you use an array (static) implementation you do not need to 'dealocate' memory.
Read this: http://www.freepascal.org/docs-html/ref/refse19.html#x54-610004.1
When a variable is inside a function (procedure), it is deleted after exiting this function.
To implement the stack can be used static array or pointers ... similarly in C language.
simple (no error handling) implementation of stack using array.
program StackExample;
type TStack = record
Items : array [1..5] of integer;
Top: integer;
end;
var Stack : TStack;
function Stack_Init() : TStack;
var
Stack : TStack;
begin
Stack.Top := 1;
Stack_Init := Stack;
end;
procedure Stack_Push(var Stack: TStack; Item : integer);
begin
Stack.Items[Stack.Top] := Item;
Stack.Top := Stack.Top + 1;
end;
function Stack_Pop(var Stack: TStack) : integer;
begin
Stack.Top := Stack.Top - 1;
Stack_Pop := Stack.Items[Stack.Top]
end;
{-----------MAIN------------}
begin
Stack := Stack_Init();
Stack_Push(Stack, 1);
Stack_Push(Stack, 2);
Stack_Push(Stack, 3);
Writeln(Stack_Pop(Stack)); {get >> 3}
Writeln(Stack_Pop(Stack)); {get >> 2}
Writeln(Stack_Pop(Stack)); {get >> 1}
end
.