Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi dynamischer Array zur Laufzeit vergrößern (https://www.delphipraxis.net/4389-dynamischer-array-zur-laufzeit-vergroessern.html)

[TP]Hawk274 27. Apr 2003 12:43


dynamischer Array zur Laufzeit vergrößern
 
Ich intialisiere ein dynamisches Array im Konstruktur von meiner Klasse mit einer Länge von 5. Während der Laufzeit muss ich aber das Array bei Bedarf vergrößern.
Muss ich dann den alten Inhalt des array's speichern bzw. einen Pointer drauf legen oder sind meine Daten dann noch vorhanden.
Zu Testzwecken habe ich das schon einmal ausprobiert und die Daten sind noch vorhanden. Ich weiß jetzt aber nicht ob das Zufall sein kann, weil der Speicherbereich vielleicht überschrieben werden kann und dann wäre meine Daten weg.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  dynArTmp: array of string;
  i: integer;
begin
  SetLength(dynArTmp, 5);
  Memo1.Clear;
  for i:= Low(dynArTmp) to High(dynArTmp) do
  begin
    dynArTmp[ i ] := 'Test ' + IntToStr(i);
    Memo1.Lines.Insert(Memo1.Lines.Count, dynArTmp[ i ]);
  end;

  Showmessage('Array länge wird nun vergrößert!');

  SetLength(dynArTmp, High(dynArTmp)+5);
  Memo2.Clear;
  for i:= Low(dynArTmp)+5 to High(dynArTmp) do
    dynArTmp[ i ] := 'TestX ' + IntToStr(i);

  //alle anzeigen
  for i:= low(dynArTmp) to High(dynArTmp) do
    Memo2.Lines.Insert(Memo2.Lines.Count, dynArTmp[ i ]);
 
  SetLength(dynArTmp, 0);
  dynArTmp := nil;
end;

Christian Seehase 27. Apr 2003 12:52

Moin Hawk,

nein, das ist kein Zufall.
Wenn Du ein dynamisches Array vergrösserst bleiben die alten Werte immer erhalten.

Da das Vergrössern allerdings sehr auf die Performance gehen kann, wäre es anzuraten das Array von vorn herein möglichst so gross zu dimensionieren, wie erforderlich (falls sich das ungefähr erraten lässt), und nur im Notfall, und möglichst selten zu vergrössern.
(Nur mal so als Ergänzung, es sieht ja so aus, als hättest Du das berücksichtigt)


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