FItems[Length(FItems)] := i;
Dynamische Arrays sind 0-indiziert, laufen ergo von 0 bis Length - 1.
Delphi-Quellcode:
function TIntList.OutList: TIntList;
begin
Result := TIntList.Create;
// Durch Self ohne das letzte Item iterieren und in Result einfügen.
end;
PS: Eine TList statt dem Array wäre besser.