Странная ошибка времени выполнения при реализации сортировки пузырьков в Pascal - PullRequest
0 голосов
/ 19 мая 2011

Этот фрагмент не только вызывает ошибку времени выполнения, но и закрывает 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 (хотя и не в режиме отладки) выдает ошибку вне диапазона, но под своими наблюдениями я вижу, что переменные, которые я пытаюсь прочитать, существуют. Любая помощь очень ценится!

Ответы [ 2 ]

1 голос
/ 21 мая 2011

Это выглядит корректно (кроме опечаток) ... так что давайте попробуем что-нибудь простое.
Каково значение "j", когда вы прерываете? Если отладчик не скажет вам, попробуйте добавить:

writeln ('j = ', j);

как раз перед вызовом "своп".

Как и предполагал вопрос Йохая, ваш массив должен быть измерен по крайней мере от От 1 (или ниже) до MAXPLAYERS (или больше). (Т.е.: 0 .. MAXPLAYERS-1 не будет работать, но 1..РАСПРЕДЕЛИТЕЛИ должны.)

1 голос
/ 19 мая 2011

rAux:trplayers; Вы ввели неверный символ или тип действительно содержит «r» в названии?

...