AGB  ·  Datenschutz  ·  Impressum  







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

Dynamisches Array kopieren - AV ?

Ein Thema von Flips · begonnen am 29. Apr 2008 · letzter Beitrag vom 29. Apr 2008
Antwort Antwort
Flips

Registriert seit: 17. Feb 2005
Ort: Sankt Wendel
491 Beiträge
 
Delphi 7 Professional
 
#1

Dynamisches Array kopieren - AV ?

  Alt 29. Apr 2008, 17:13
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
Philipp F.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Dynamisches Array kopieren - AV ?

  Alt 29. Apr 2008, 17:19
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
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Dynamisches Array kopieren - AV ?

  Alt 29. Apr 2008, 17:25
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)


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
$2B or not $2B
  Mit Zitat antworten Zitat
Flips

Registriert seit: 17. Feb 2005
Ort: Sankt Wendel
491 Beiträge
 
Delphi 7 Professional
 
#4

Re: Dynamisches Array kopieren - AV ?

  Alt 29. Apr 2008, 17:31
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
Philipp F.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Dynamisches Array kopieren - AV ?

  Alt 29. Apr 2008, 17:36
*axt überreich*

war also (doch) ein Zugriffsproblem


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).
$2B or not $2B
  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 02:31 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