AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Mehrdim. Dyn. Array of TMyType echt kopieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mehrdim. Dyn. Array of TMyType echt kopieren

Ein Thema von dizzy · begonnen am 18. Jul 2004 · letzter Beitrag vom 19. Jul 2004
Antwort Antwort
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#1

Mehrdim. Dyn. Array of TMyType echt kopieren

  Alt 18. Jul 2004, 18:26
Hi!

Ich versuche schon die ganze Zeit ein dynamisches Array dass ein Feld meines Formulars ist in eine lokale Prozedurvariable "echt" zu kopieren.
Zur Zeit mache ich das über eine Doppelschleife (da 2D-Array):
Delphi-Quellcode:
type
  TMyType = record
    x, y: double;
  end;

  TForm1 = class(TForm)
  ...
  Grid: array of array of TMyType;
  end;

.
.
.

procedure DoSomething;
var x, y: integer;
    LGrid: array of array of TMyType;
begin
  SetLength(LGrid, Length(Grid), Length(Grid[0]));
  for y := 0 to Length(LGrid[0])-1 do
  begin
    for x := 0 to Length(LGrid)-1 do
    begin
      LGrid[x,y].x := Grid[x,y].x;
      LGrid[x,y].y := Grid[x,y].y;
    end;
  end;
end;
Das finde ich allerdings ziemlich unschön. Copy aber meckert, dass der Parameter nicht möglich sei (wobei in der OH steht, dass dyn. Arrays auch gehen (aber wohl keine mehrdim.)), und mit Move produziere ich dauernd Zugriffsverletzungen
So hab ich's versucht:
Delphi-Quellcode:
SetLength(LGrid, Length(Grid), Length(Grid[0]));
Move(Grid, LGrid, Length(Grid) * Length(Grid[0]) * SizeOf(TMyType);
Habe auch mal versucht nicht bei Grid und LGrid "array of array of TMyType" zu schreiben, sondern hab nen Typ dafür gemacht. Aber in beiden Fällen gibt das leider eine AV an Adresse 0x00000000. Wie kann ich denn mehrdim. dyn. Arrays auf einen Schlag kopieren?

Danke euch schon mal!
dizzy
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
xineohp

Registriert seit: 29. Jan 2004
Ort: Heusenstamm
420 Beiträge
 
Delphi 2005 Professional
 
#2

Re: Mehrdim. Dyn. Array of TMyType echt kopieren

  Alt 18. Jul 2004, 19:35
moin,

also bei mir funzt es mit copy perfekt!
Delphi-Quellcode:
type
  tmytype = record
   x,y: integer;
  end;

var
a,b: array of array of tmytype;

setlength(a,100,100);
b := copy(a);
setlength(a,0,0);
Peter Enenkel
blubb
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Mehrdim. Dyn. Array of TMyType echt kopieren

  Alt 18. Jul 2004, 19:51
Tatsache! Sowatt...

Nur leider leider ist es wohl doch keine ganz echte Kopie! Es werden nur die Referenzen auf die ganzen MyTypes kopiert, aber die MyTypes nicht

Wie mach ich denn das jetzt?
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Mehrdim. Dyn. Array of TMyType echt kopieren

  Alt 18. Jul 2004, 20:14
Versuch mal, jedes Element der ersten Dimension (also jedes Array of TMyTpe) mit Copy zu kopieren.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Mehrdim. Dyn. Array of TMyType echt kopieren

  Alt 19. Jul 2004, 00:09
Aha! Das geht wohl! Eine echte Kopie entsteht dann! Cool! Zumindest schon mal eine Schleife gespart. Dank'schö! Gibt es evtl. noch eine weitere Möglichkeit diesen Speicherblock der ja eigentlich (virtuell) zusammenhängen sein müsste, da auf einen Schlag alloziiert, mit einem Rutsch zu duplizieren?

Habe es jetzt auch mal mit einem 1D-Array probiert, nur ist die Verwaltung der Indezes mit mod und dem ganze Schnickschnack wieder dermaßen unübersichtlich, unschön und zu dem dann auch nicht mehr wirklich schneller

Könnte man da evtl. mit BitBlt dran gehen? Wie könnte sowas dann aussehen?
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Mehrdim. Dyn. Array of TMyType echt kopieren

  Alt 19. Jul 2004, 09:26
Dyn. Arrays funktionieren nicht nur etwas anders als statische, sie liegen auch anders im Speicher. Ein Array of Array of TMyType speichert in jedem Element eine Variable vom Typ Array of TMyType. Da eine Variable eines solchen Typs aber nur ein Zeiger auf das eigentliche Array ist, hast du folgluch ein ein Array of Pointer. Nur die unterste Stufe (also hier das Array of TMyType) liegt zusammenhängend im Speicher.
Du brauchst bei dynamischen Arrays also immer n-1-Schleifen, wenn n die Anzahl der Dimensionen ist.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Mehrdim. Dyn. Array of TMyType echt kopieren

  Alt 19. Jul 2004, 12:14
Okay, danke!
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  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 00:11 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