AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

System.Generics.Collections.TArray.Copy

Offene Frage von "Uwe Raabe"
Ein Thema von Der schöne Günther · begonnen am 24. Nov 2014 · letzter Beitrag vom 24. Nov 2014
Antwort Antwort
Seite 1 von 2  1 2      
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 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
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#2

AW: System.Generics.Collections.TArray.Copy

  Alt 24. Nov 2014, 10:53
Copy?
Meinst du nicht eher TArray.Copy<Integer>
Zitat:
Delphi-Quellcode:
class procedure Copy<T>(const Source, Destination: array of T; SourceIndex, DestIndex, Count: NativeInt); overload; static;
class procedure Copy<T>(const Source, Destination: array of T; Count: NativeInt); overload; static;
Auch wenn ich die OH ein bissl eigenartig finde, denn einer der Array (Dest) sollte doch VAR sein.


Aber ja, > wäre da wohl besser.

Code:
0123456789
   *******

(SourceIndex + Count >= SourceLength)
(3 + 7 >= 10) = True

PS: Dein Beispiel kann man auch mit den alten Funktionen umsetzen.
Delphi-Quellcode:
firstArray := [5,4,3,2,1];
secondArray := Copy(firstArray);
Und gab es nicht auch eine Insert-Funktion im TArray?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (24. Nov 2014 um 11:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: System.Generics.Collections.TArray.Copy

  Alt 24. Nov 2014, 11:25
Da sind zwei Fehler den ich schon gemeldet habe ...

https://quality.embarcadero.com/browse/RSP-9620
https://quality.embarcadero.com/browse/RSP-9622
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: System.Generics.Collections.TArray.Copy

  Alt 24. Nov 2014, 11:43
Danke! Scheint aber nicht so wichtig zu sein da die Tickets noch nicht einmal jemandem zugewiesen sind. Ich meine, Arrays kopieren. Wer tut das schon.

Ich weiß immer nicht, ob ich mich freuen oder weinen soll wenn man sieht dass der Fehler nicht im eigenen Kopf, sondern im Embarcadero Sourcecode steckt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#5

AW: System.Generics.Collections.TArray.Copy

  Alt 24. Nov 2014, 12:32
Ich meine, Arrays kopieren. Wer tut das schon.
Dabei wurde es doch als eines DER Features angepriesen, weswegen man das neue Delphi kaufen sollte ... Also dann sollte es auch besser mal funktionieren.

Ohne eingelogt zu sein, kann man das ja nun nichmal mehr lesen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#6

AW: System.Generics.Collections.TArray.Copy

  Alt 24. Nov 2014, 13:04
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;
Das steht in meinem XE7 aber anders da:

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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: System.Generics.Collections.TArray.Copy

  Alt 24. Nov 2014, 13:09
Jetzt bin ich verwirrt. Ich stehe weiterhin zu meinem Wort, meine XE7 System.Generics.Collections.pas enthält genau das! Enterprise und Architect sollten sich doch hier nicht unterscheiden?
In der Fixlist für XE7.1 finde ich auch nichts passendes.


Größe: 72.436 Bytes
Embarcadero® RAD Studio XE7 Version 21.0.17017.3725
Enterprise
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#8

AW: System.Generics.Collections.TArray.Copy

  Alt 24. Nov 2014, 13:19
Zitat:
if Source = Destination then
Man darf die Funktionen nicht verwenden, um Daten innerhalb eines Arrays umukopieren?

Das ist aber blöd.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#9

AW: System.Generics.Collections.TArray.Copy

  Alt 24. Nov 2014, 13:22
@Uwe, bei Build 21.0.17017.3725 war es aber noch die vom OP genannte Variante. Du hast sicher Update 1 bereits installiert. Allerdings ist diese Änderung nicht in den Release notes.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#10

AW: System.Generics.Collections.TArray.Copy

  Alt 24. Nov 2014, 13:24
@Uwe, bei Build 21.0.17017.3725 war es aber noch die vom OP genannte Variante. Du hast sicher Update 1 bereits installiert. Allerdings ist diese Änderung nicht in den Release notes.
Vermutlich ist es so, daß der Fix in Update 1 enthalten ist. Im Moment kann ich das auch nicht kontrollieren.

Man kann sich vielleicht doch nicht immer auf die Vollständigkeit der Bugfix-Liste verlassen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz