Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Array ändert sich von allein (https://www.delphipraxis.net/134725-array-aendert-sich-von-allein.html)

peter314 27. Mai 2009 20:10


Array ändert sich von allein
 
Hallo allerseits.

Bei folgendem Text tritt ein kleines Problem auf, zu dem mir leider keine Lösung einfällt.
Delphi-Quellcode:
procedure TForm1.tausch(nr,num: integer);
var
speicher: integer; //zwischenspeicher für die zu tauschende Zahl
begin
ZugPos[nr]:= ZugPos[nr-1];               //ZugPos ist ein Array of Array of Array[0..1] of integer
speicher:= ZugPos[nr,num div 4,num mod 2];
ZugPos[nr,num div 4,num mod 2]:= ZugPos[nr,num div 4+1,num mod 2];
ZugPos[nr,num div 4+1,num mod 2]:= speicher;
end;
Dabei ändert sich ZugPos[nr] so wie es soll, jedoch wird dabei auch ZugPos[nr-1] verändert, sodass am Ende der prozedur beide Die gleichen Werte haben.

Ich hab gehört, dass durch die Übertragung der Werte ZugPos[nr]:= ZugPos[nr-1] nicht nur die Werte übergeben werden sondern auch der Speicherplatz. Damit meine ich das beide anschließend am Selben Ort gespeichert sind und somit auch die gleichen Werte haben.

Ob das nun stimmt oder auch nicht kennt irgendjemand eine Lösung für das Problem?

Danke

Hawkeye219 27. Mai 2009 20:34

Re: Array ändert sich von allein
 
Hallo,

mit der Funktion Delphi-Referenz durchsuchenCopy kann man eindeutige Kopien anlegen:

Delphi-Quellcode:
// ZugPos[nr]:= ZugPos[nr-1];
ZugPos[nr] := Copy(ZugPos[nr - 1]);
Gruß Hawkeye

peter314 27. Mai 2009 20:56

Re: Array ändert sich von allein
 
Danke jetzt funktionierts. Sogar das ganze Programm läuft vernünftig.
Bekomme jetzt leider nen Stack overflow aber den krieg ich auch noch weg.

Danke nochmals.

Corpsman 28. Mai 2009 06:07

Re: Array ändert sich von allein
 
ich denke es liegt daran das du da ja mit 2 dim arrays arbeitest, und da wird eben nur die Referenz kopiert und nicht das array.

Hawkeye219's lösung sagt expliziet das das array kopiert werden mus und nicht die Referenz.


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