Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi [Bug oder Feature?] Array-Verkopplung (https://www.delphipraxis.net/132900-%5Bbug-oder-feature-%5D-array-verkopplung.html)

fLaSh11 21. Apr 2009 20:06


[Bug oder Feature?] Array-Verkopplung
 
Hallo Delphianer,

mir ist gestern etwas interessantes aufgefallen. Ich habe zwei Arrays, die fast identische Namen haben, das eine hat allerdings einen Buchstaben mehr im Namen:

Delphi-Quellcode:
Stat: Array[1..100] of String;
LStat: Array[0..200] of String;
Wenn ich nun Stat[101] abfrage, kommt als Ergebnis der String, der in LStat[0] steht, raus.

Das ganze verfolgt das Muster, dass sobald das Array Stat zu Ende ist (=> Exception?), mit dem Array LStat begonnen wird. Und das wird dann schön weitergehzählt.

Stat[1] liefert Stat[1]
...
Stat[100] liefert Stat[100]
Stat[101] liefert LStat[0]
Stat[102] liefert LStat[1]
u.s.w.

In die Gegenrichtung funktioniert es auch: LStat[-1] liefert mit Stat[100]

D.h. Delphi schließt das Array LStat an das Array Stat an. Warum?

mkinzler 21. Apr 2009 20:09

Re: [Bug oder Feature?] Array-Verkopplung
 
Delphi fordert für die Arrays Speicher vom BS an, da die Anforderung aufeinenader folgt, wird der Speicher so zugeteilt.

Luckie 21. Apr 2009 20:10

Re: [Bug oder Feature?] Array-Verkopplung
 
Wahrscheinlich liegen die Arrays zufälligerweise hiuntereinander im Speicher. Mehr dürfte nicht dahinterstecken.

jfheins 21. Apr 2009 20:10

Re: [Bug oder Feature?] Array-Verkopplung
 
Schalte die Bereichsprüfung ein ;)

Ein Stat[x] ist im Grunde ein (@Stat + x)^ ;)

Namenloser 21. Apr 2009 20:16

Re: [Bug oder Feature?] Array-Verkopplung
 
Ich stelle die Gegenfrage: Wieso nicht?

Wenn du Range-Checks aktivierst, soltle Delphi aber trotzdem eine Exception werfen.

Edit: wtf? 3 Antworten und kein Kasten?

fLaSh11 21. Apr 2009 20:16

Re: [Bug oder Feature?] Array-Verkopplung
 
Ok, Problem gelöst :)

Wenn ich irgendeine Variable zwischen drin deklariere und ihr einen Wert zuweise, funktioniert's nichtmehr.

Danke für des Rätsels Lösung :thumb:

Edit: ich hatte das Prob noch nie, da ich immer innerhalb der definierten Bereiche blieb. Und nun hatte ich zwei Arrays mit iwie zusammenhängenden Namen und das Problem trat auf. Da dachte ich gleich an die Illuminaten :mrgreen:


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