小编Igo*_*nin的帖子

程序 NEW 导致分段错误

所以我试图在 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()并没有 …

delphi pascal freepascal dynamic

1
推荐指数
1
解决办法
87
查看次数

标签 统计

delphi ×1

dynamic ×1

freepascal ×1

pascal ×1