Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.158 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

System.Generics.Collections.TArray.Copy

  Alt 24. Nov 2014, 10:47
Ich bin zu dumm dafür. Wie ist das gemeint? Doku ist natürlich keine vorhanden.

Delphi-Quellcode:
var
   firstArray, secondArray: TArray<Integer>;
begin
   firstArray := [5,4,3,2,1];
   SetLength(secondArray, Length(firstArray));
   TArray.Copy(firstArray, secondArray, Length(firstArray));
Ich finde, das ist richtig. Tatsächlich wirft er mir aber eine EArgumentOutOfRangeException -Exception um die Ohren denn in
System.Generics.Collections.pas steht:

Delphi-Quellcode:
class procedure TArray.CheckArrays(Source, Destination: Pointer; SourceIndex, SourceLength, DestIndex, DestLength, Count: NativeInt);
begin
  if (SourceIndex < 0) or (DestIndex < 0) or (SourceIndex >= SourceLength) or (DestIndex >= DestLength) or
     (SourceIndex + Count >= SourceLength) or (DestIndex + Count >= DestLength) then
    raise EArgumentOutOfRangeException.CreateRes(@SArgumentOutOfRange);
  if Source = Destination then
    raise EArgumentException.CreateRes(@sSameArrays);
end;
Warum ist es denn ungültig wenn SourceIndex + Count >= SourceLength sind? Das muss doch so sein. Wenn ich ein Array mit fünf Elementen kopieren will- Dann ist doch Index = 0, Count = 5 und Length = 5.

Ich finde, er müsste auf ">" prüfen und nicht ">="



Wo ist mein Denkfehler?
  Mit Zitat antworten Zitat