所以我试图在 fpc 中实现一个 C 风格的堆栈结构,
主要原则是:每个元素都有一个值和一个指向下一个元素的指针,堆栈本身只包含一个指向它最后一个元素的指针
type stackNode = class
public
val: integer;
next: ^stackNode;
end;
type stack = class
private
top: ^stackNode;
public
constructor Create();
procedure push(v: integer);
procedure clear();
function pop():integer;
function back():integer;
destructor Destroy();
end;
Run Code Online (Sandbox Code Playgroud)
这是我push在 C++ 中的实现方式:
void push(_t _v) {
top = new stackNode<_t>(_v, top);
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在 pascal 中实现基本相同的代码时
procedure stack.push(v: integer);
var
temp: ^stackNode;
begin
temp := top;
new(top);
top^.next := temp;
top^.val := v;
end;
Run Code Online (Sandbox Code Playgroud)
new()当我尝试将第二个元素推入堆栈时,它在调用后给我一个分段错误。
有些东西告诉我 pascalnew()并没有 …