Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dynamisches Array kopieren - AV ? (https://www.delphipraxis.net/112916-dynamisches-array-kopieren-av.html)

Flips 29. Apr 2008 16:13


Dynamisches Array kopieren - AV ?
 
Hi.

Ich möchte ein dynamisches Array kopieren. Allerdings gibt er mir direkt im ersten Durchlauf eine AV.
Der Code hier ist vereinfacht, aber ansonsten genauso.
output ist ein funktionierendes dynamisches Array, vom selben Typ wie buf.
Beim Start ist Output bereits gefüllt und hat eine gewisse Länge / Größe
Delphi-Quellcode:
var
  buf : TOutput; // array of array of -> record -> Zeichen : Char
  i,j : integer;
begin
SetLength(buf,length(Output));
for i := 0 to length(Output) - 1 do
  begin
     SetLength(buf[i],length(Output[i]));
     for j := 0 to length(Output[i]) - 1 do
       begin
         Output[i,j].Zeichen := chr(1);
         buf[i,j].Zeichen := Output[i,j].Zeichen;
       end;
  end;
end;
Wieso gibts da ne AV? (da = bei "buf[i,j].Zeichen := ....")
Btw, wie würdet ihr ein dynamisches Array am schnellsten kopieren? Mit CopyMemory (Bsp. wäre nett ;-) ) ?

Thx, Flips

Klaus01 29. Apr 2008 16:19

Re: Dynamisches Array kopieren - AV ?
 
Hallo,

hast Du dir schon einmal die Prozedur move angeschaut.
Die sollte das auf einfache weise erledigen.
In der Hilfe ist auch ein Beispiel.

Grüße
Klaus

himitsu 29. Apr 2008 16:25

Re: Dynamisches Array kopieren - AV ?
 
Der Code selber scheint OK zu sein.
wie hast du denn "Output" befüllt? (wenn "buf" leer ist, könnte ich mir akuell nur einen Zugriffsfehler auf "Output" vorstellen)


Delphi-Quellcode:
Buf := Copy(Output);

wenn du mehr, als nur "Zeichen", im Record hast, wovon auch nichts dynamisch ist, dann gingt etwas in Richtung CopyMemory ... wie sieht den der record komplett aus?
So (nur mi dem einem Char drin) wäre CopyMemory/Move nur bremsend.



PS: CopyMemory ruft auch nur Move auf, also egal :angel:

Flips 29. Apr 2008 16:31

Re: Dynamisches Array kopieren - AV ?
 
Aah....wie würde mein Englischlehrer jetzt sagen? You can't see the wood for the trees...
Um ehrlich zu sein habe ich da nur zur Vereinfachung record angegeben. Es ist ne Klasse...und die will schön initialisiert werden ;-)
Da es mir ja nur um einen Wert aus der Klasse geht, spare ich mir das Create und Free und erstelle ein dyn. Array, in welches ich die benötigten Werte reinschreibe. Brauche ja nicht die ganzen Objekte zu kopieren.

Danke euch allen :hi:

himitsu 29. Apr 2008 16:36

Re: Dynamisches Array kopieren - AV ?
 
*axt überreich*

war also (doch) ein Zugriffsproblem :angel:


gut, bei einer Klasse wäre etwas mit CopyMemory/Move schon schwerer, da man dort ja meist keinen direkten Zugriff auf die Variablen hat (Getter/Setter).


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:54 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