【发布时间】:2011-05-19 04:05:31
【问题描述】:
这个 sn-p 不仅会导致运行时错误,如果我使用调试器运行它,它还会关闭 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(虽然不在调试模式下)吐出一个超出范围的错误,但在我的观察下,我看到我试图读取的变量存在。非常感谢任何帮助!
【问题讨论】:
-
首先,数组声明在哪里?其次,如果您将 vAux 作为输入,为什么要在开始时执行 vAux:=tplayers; ?
-
@Yochai:很抱歉,我的原始代码是西班牙语,所以我想我最好翻译一些变量并将其弄混。该数组被声明为 tplayers=array[1..MAXPLAYERS] of tplayers。 tplayers 只是一个包含一些整数值的记录,例如分数。
-
请发布您的实际代码,无需担心翻译。变量名并不重要,尝试将其更改为在此处发布通常会引入错误(例如此处发生的情况),从而更改或隐藏实际问题。
-
更好,一个演示问题的最小可运行程序。
标签: pascal freepascal