Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   dyn. Array verkürzen (https://www.delphipraxis.net/172146-dyn-array-verkuerzen.html)

Gargamel 15. Dez 2012 14:33

dyn. Array verkürzen
 
Hi

Wenn ich einem dyn. Array eine Länge zuweise, die Elemente mit Werten fülle und danach das Array mit setLength(...) verkürze, sind die obersten Elemente trotzdem verfügbar. Das verstehe ich nicht. Kann mir das jemand erklären?

Danke.

Hier in dem Codebeispiel ist es ein Array aus 5 Elementen, welches dann auf 3 gekürzt wird.

Delphi-Quellcode:
var liste:array of integer;
    i:integer;
begin
  setLength(liste, 5);

  liste[0]:=0;
  liste[1]:=1;
  liste[2]:=2;
  liste[3]:=3;
  liste[4]:=4;

  for i:=0 to 4 do
    ListBox1.Items.Add(IntToStr(liste[i]));
  Listbox1.Items.Add('Schleifenende');

  setLength(liste, 3);
  for i:=0 to 4 do
    ListBox1.Items.Add(IntToStr(liste[i]));
  Listbox1.Items.Add('Schleifenende');
end;

dummzeuch 15. Dez 2012 14:39

AW: dyn. Array verkürzen
 
Das liegt daran, dass man auch ueber Arraygrenzen hinaus auf Elemente zugreifen kann, wenn man das nicht unter den Compileroptionen ausschaltet. Der Speicher ist allerdings u.U. schon wieder fuer andere Verwendung freigegeben und koennte dadurch ueberschrieben worden sein, deshalb sollte man sich darauf nicht verlassen.

Gargamel 15. Dez 2012 15:01

AW: dyn. Array verkürzen
 
Vielen Dank.
Wenn ich in den Compiler-Optionen "Bereichsüberprüfung" aktiviere, tritt tatsächlich sofort der Fehler auf.

Popov 15. Dez 2012 15:15

AW: dyn. Array verkürzen
 
Du weißt es wahrscheinlich schon, aber am besten mit
Delphi-Quellcode:
for i := Low(Arrayname) to High(Arrayname) do
arbeiten.

Gargamel 15. Dez 2012 15:28

AW: dyn. Array verkürzen
 
Ja, ich ermittle immer die Gesamtanzahl der Elemente eines Arrays. Ich bin auch nur durch Zufall darauf gestossen, daß man nach Verkürzung eines Arrays immer noch auf dessen Elemente zugreifen kann.


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