Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi 2 Arrays definiert - im Endeffekt aber ein und das selbe? (https://www.delphipraxis.net/19578-2-arrays-definiert-im-endeffekt-aber-ein-und-das-selbe.html)

Chewie 5. Apr 2004 19:22

Re: 2 Arrays definiert - im Endeffekt aber ein und das selbe
 
Lass dir einfach mal, so wie ich es gemacht habe, die Adressen ausgeben, und du siehst 100%ig, ob es sich um das gleiche Array handelt oder nicht.

dizzy 5. Apr 2004 19:22

Re: 2 Arrays definiert - im Endeffekt aber ein und das selbe
 
Zitat:

Zitat von Nonsense
Vielleicht liegt es an der Zuweisung?
Delphi-Quellcode:
procedure TWorld.BufferCreature(SourceX, SourceY, TargetX, TargetY: Integer;
  BufferArray, WorldArray: TWorldArray);
begin
  BufferArray[TargetX][TargetY] := WorldArray[SourceX][SourceY];
end;
Würde bei dieser Zuweisung wirklich eine Kopie erstellt werden?

Bei dieser Zuweisung wird tatsächlich das Element in Array[SourceX/Y] kopiert. Bei:
Delphi-Quellcode:
  BufferArray := WorldArray;
also ohne Indezes wird der Pointer übergeben, und es entsteht das von dir beschriebene Szenario. Schau mal, ob du irgendwo im Code sowas wie oben drin hast. Dann ist alles klaro.

gruss,
dizzy

\edit: Nen Plural zum Singular degradiert :)

Nonsense 5. Apr 2004 19:26

Re: 2 Arrays definiert - im Endeffekt aber ein und das selbe
 
Zitat:

Zitat von Chewie
Lass dir einfach mal, so wie ich es gemacht habe, die Adressen ausgeben, und du siehst 100%ig, ob es sich um das gleiche Array handelt oder nicht.

Ok, gewonnen. Es sind unterschiedliche Adressen. Und ich war mir so sicher, dass es der Fehler sein muss. Dann mal wieder rein in die lustige Suche...

Danke! :dp:

Ich kombiniere mal: Wenn ich ein Objekt (Instanz) von ArrayA nach ArrayB kopieren will, spuckt der Destructor beim beenden ein EInvalidPointer aus. Wenn ich auf dem ArrayB aber ein neues Objekt erstelle (TMeineKlasse.Create) funktioniert alles wunderbar. D.h. es wird nur der Pointer übergeben.
Demnach muss es der Zuweisung liegen:
Delphi-Quellcode:
procedure TWorld.BufferCreature(SourceX, SourceY, TargetX, TargetY: Integer;
  World: TWorld);
begin
  World.FBufferArray[TargetX][TargetY] := World.FWorldArray[SourceX][SourceY];
end;
Hatte mir sowas schon gedacht. Wie kann ich denn ein Objekt von ArrayA nach ArrayB kopieren? Ich habe da keinen blassen Schimmer, deswegen auch die Zuweisung.

Hat sich erledigt! Danke an Chewie!


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:29 Uhr.
Seite 2 von 2     12   

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