我在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?
答案 0 :(得分:1)
RTE 216通常是致命的例外。 GPF / SIGSEGV,在某些情况下是SIGILL / SIGBUS,这可能意味着你的程序在某处破坏了内存。
使用运行时检查进行编译可能会帮助您找到错误(Free Pascal:-Criot)