Die Richtung stimmte schon.
Delphi-Quellcode:
Schuss1[j].Free;
for x:=j to high(Schuss1)-1 do
Schuss1[x] := Schuss1[x+1];
SetLength(Schuss1,length(Schuss1)-1);
Außer daß du an der falschen Stelle angefangen hast.
j-1 ist ja der Schuß vor dem zu Löschenden ... du hattest also den Falschen entfernt
und wenn j der 1. Schuß ist (j=0), dann hast du den Grund für die Berreichsüberschreitung.