program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
Type TBase=record
Key:integer;
end;
Index=1..20000;
Vector=array[Index] of TBase;
Function Shell(var x:vector;n:integer):vector;
Var t,m,h:integer;
i,j:index;
y:TBase;
begin
t:=round(ln(n)/ln(2))-1;
for m:=t downto 1 do
begin
h:=0;
for i:=1 to m do h:=2*h+1; //h - шаг сортировки
for i:=h+1 to N do
begin
y:=x[i];j:=i-h;
while (j>=1) and (y.key<x[j].Key) do
begin
x[j+h]:=x[j];
j:=j-h;
end;
x[j+h]:=y;
end;
end;
Shell:=x;
end;
Var z,n:integer;x,qwer:vector;
begin
n:=10; //кол-во элементов массива
Randomize;
for z:=1 to n do
begin
x[z].key:=Random(20);
Writeln(x[z].key);
end;
qwer:=Shell(x,n);
Writeln;
for z:=1 to n do
Writeln(qwer[z].key);
Readln;
end.
Иногда программа работает исправно, а иногда вылетает на строче x[j+h]:=y; в функции

Заранее спасибо