这个片段不仅会导致运行时错误,而且如果我使用调试器运行它,它会使 FPC 关闭。
procedure sortplayersbyscore(var vAux:tplayers);
procedure swap(var a:trplayers;var b:trplayers);
var
rAux:trplayers;
begin
rAux:=a;
a:=b;
b:=rAux;
end;
var
i,j:integer;
sorted:boolean;
begin
vAux:=playersarray;
i:=1;
sorted:=false;
while (i <= MAXPLAYERS -1) and not sorted do
begin
j:=1;
sorted:=true;
while (j <= MAXPLAYERS -i) do
begin
if (vAux[j].score < vAux[j+1].score) then
begin
swap(vAux[j],vAux[j+1]);
sorted:=false;
end;
inc(j);
end;
inc(i);
end;
end;
代码本身是一个非常大的源文件的一部分,我可以发布整个内容,但导致错误的只是那一堆行。调试器在以下行终止:
swap(vAux[j],vAux[j+1]);
tplayers 只是一种定义为记录数组的类型,其中包含一堆其他变量中的分数(整数)。tplayers 是上述记录的类型。我完全不知所措;FPC(虽然不在调试模式下)吐出一个超出范围的错误,但在我的观察下,我看到我试图读取的变量存在。非常感谢任何帮助!