执行结束前fpc Pascal运行时错误216

时间:2013-06-03 14:51:03

标签: runtime-error pascal freepascal

我在Pascal中实现了邻接列表(通过首先读取边缘端点,然后使用动态数组将所需的内存量分配给每个节点的边缘列表)。程序执行正常,给出正确的输出,但在退出之前给出运行时错误216 代码是:

type aptr = array of longint;
var edgebuf:array[1..200000,1..2] of longint;
    ptrs:array[1..100000] of longint;
    i,j,n,m:longint;
    elist:array[1..100000] of aptr;

{main}
begin
    readln(n,m);
    fillchar(ptrs,sizeof(ptrs),#0);
    for i:=1 to m do begin
    readln(edgebuf[i][1],edgebuf[i][2]);
    inc(ptrs[edgebuf[i][1]]);
    end;
    for i:=1 to n do begin
    setlength(elist[i],ptrs[i]);
    end;
    fillchar(ptrs,sizeof(ptrs),#0);

    for i:=1 to m do begin
    inc(ptrs[edgebuf[i][1]]);
    elist[edgebuf[i][1]][ptrs[edgebuf[i][1]]]:=edgebuf[i][2];
    end;

    for i:=1 to n do begin
    writeln(i,' begins');
    for j:=1 to ptrs[i] do begin
        write(j,' ',elist[i][j],' ');
    end;
    writeln();
    writeln(i,' ends');
    end;
    writeln('bye');
end.

在文件上运行时

4 5
1 2
3 2
4 3
2 1
2 3

给出输出:

1 begins
1 2 
1 ends
2 begins
1 1 2 3 
2 ends
3 begins
1 2 
3 ends
4 begins
1 3 
4 ends
bye
Runtime error 216 at $0000000000416644
  $0000000000416644
  $00000000004138FB
  $0000000000413740
  $0000000000400645
  $00000000004145D2
  $0000000000400180

一旦程序说“再见”,执行的程序是什么给运行时错误216?

1 个答案:

答案 0 :(得分:1)

RTE 216通常是致命的例外。 GPF / SIGSEGV,在某些情况下是SIGILL / SIGBUS,这可能意味着你的程序在某处破坏了内存。

使用运行时检查进行编译可能会帮助您找到错误(Free Pascal:-Criot)