このスニペットは実行時エラーを引き起こすだけでなく、デバッガーを使用して実行すると 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 は、スコア (整数) とその他の変数を含むレコードの配列として定義された型です。trplayers は前述のレコードのタイプです。私は完全に途方に暮れています。FPC (デバッグ モードではない場合) は範囲外エラーを吐き出しますが、ウォッチの下では、読み込もうとしている変数が存在することがわかります。どんな助けでも本当に感謝しています!