AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Wann kann System.Copy(Array, Index, Count) eine Exception liefern?
Thema durchsuchen
Ansicht
Themen-Optionen

Wann kann System.Copy(Array, Index, Count) eine Exception liefern?

Ein Thema von s.h.a.r.k · begonnen am 6. Mai 2011 · letzter Beitrag vom 9. Mai 2011
Antwort Antwort
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#1

AW: Wann kann System.Copy(Array, Index, Count) eine Exception liefern?

  Alt 6. Mai 2011, 09:51
Ist deine Instanz von TApDynamicArray vielleicht gar nicht initialisiert?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Wann kann System.Copy(Array, Index, Count) eine Exception liefern?

  Alt 6. Mai 2011, 09:58
Records haben keine Instanzen.

Gut, es kommt jetzt noch darauf an, welche Typen er innerhalb seines Records verwendet,
aber Vieles wird ja von Delphi automatisch initialisiert. Vorallem dann, wenn Dieses für eine korrekte (automatisch) Speicherverwaltung nötig ist.

Für normale dynamische arrays gibt es aber auch shcon eine Clone-Funktion ... die nennt sich Copy :stipid:

MeinKlon := Copy(DasOriginalArray);
Delphi-Quellcode:
var a, b, c: array of Integer;

SetLength(a, 1);
a[0] := 123456789;
b    := a;
b[0] := 666;
c    := Copy(a);
c[0] := 987654321;
ShowMessage(Format('%d %d %d', [a[0], b[0], c[0]])); // 666 666 987654321
(normale dynamische arrays haben zwar eine Referenzzählung, aber keine prüfung, beim Schreibzugriff )

Genauso, wie man neuerdings den letzen Parameter weglassen kann,
kann man schon sehr lange alle Index-Parameter weglassen.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 6. Mai 2011 um 10:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

AW: Wann kann System.Copy(Array, Index, Count) eine Exception liefern?

  Alt 6. Mai 2011, 10:01
oh, da hatte ich zu flüchtig hingeschaut. Hab das "record" bei der Declaration übersehen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

AW: Wann kann System.Copy(Array, Index, Count) eine Exception liefern?

  Alt 6. Mai 2011, 10:17
Hm... Ich würde behaupten Delphi verschlampt die TypInfos irgendwo. Denn die System.Copy() läuft direkt in die _DynArrayCopyRange() rein und darin wird dann die Exception geworfen, d.h. die TypInfos fehlen imho von vorn herein. Dann muss ich wohl mit meinem Workaround leben, obwohl mich sowas ungemein nerv... Aber sonst hätten die Embarcadero-Mitarbeiter ja nichts mehr zu fixen.

@himitsu: Kennst du mehr solcher Probleme, dass TypInfos bei der Verwendung von Generics fehlen? Scheinst da ja recht gut auf dem Laufenden zu sein. Habe dieses nette Feature noch nicht so lange in Gebrauch.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Wann kann System.Copy(Array, Index, Count) eine Exception liefern?

  Alt 6. Mai 2011, 10:54
Nee, geziehlt fällt mir jetzt nix ein.

Bei Records mit Recordmetoden und den Records sleber als Result davon und zusammen mit nur einem Feld im Record (z.B. nur ein dyn. array oder ein Interface), gibt es einen Fehler in der Referenzzählung (wird zuoft freigegeben und dann knallts).

Enums und Sets, mit vordefinierten Werten (type e = (one, two=2, tree); ), besitzen keine Typinfos zu den Werten.

Und bei den Generics gibt es Fehler die nicht immer da sind. Irgendwo davor eine Leerzeile eingefügt und urplötzlich geht es u.Ä.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#6

AW: Wann kann System.Copy(Array, Index, Count) eine Exception liefern?

  Alt 6. Mai 2011, 11:01
Bei Records mit Recordmetoden und den Records sleber als Result davon und zusammen mit nur einem Feld im Record (z.B. nur ein dyn. array oder ein Interface), gibt es einen Fehler in der Referenzzählung (wird zuoft freigegeben und dann knallts).
Äh, nochmal langsam?! Ein Record mit Methoden, welcher auch noch ein Feld hat, am besten noch ein dynamisches Array? Also quasi sowas hier
Delphi-Quellcode:
TApDynamicArray<T> = record
private const
  DEFAULT_SEPARATOR = ';';
  DEFAULT_USE_BRACKETS = True;
  DEFAULT_BRACKETS_OPEN = '[';
  DEFAULT_BRACKETS_CLOSE = ']';
private type
  TDynamicArray = array of T;
private
  FData : TArray<T>;
  { Methoden }
public
  { Methoden }
  property Data[Index: Integer]: T read GetData write SetData; default;
  property Length: Integer read GetLength write SetLength;
end;
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Wann kann System.Copy(Array, Index, Count) eine Exception liefern?

  Alt 6. Mai 2011, 11:07
Jupp.

Das einfachste wäre quasi Dieses.
Delphi-Quellcode:
type
  TKnall = record
    FData: array of irgendwas;
    function Machwas: TKnall;
  end;

http://www.delphipraxis.net/132817-u...ler-e2506.html
https://forums.codegear.com/thread.jspa?threadID=35565
http://www.delphipraxis.net/144528-s...iccharset.html
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 6. Mai 2011 um 11:09 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz