Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Default Werte in Array? (https://www.delphipraxis.net/137885-default-werte-array.html)

aaaaaaaaaa_10 30. Jul 2009 12:10


Default Werte in Array?
 
Hallo,
hab nur eine kleine Frage:

Wenn man ein Array erstellt. Hat das dann bereits Default Werte oder sind die Felder leer?

mkinzler 30. Jul 2009 12:12

Re: Default Werte in Array?
 
Der Speicher müsset leer sein. Ich würde mich darauf aber nicht verlassen.

DeddyH 30. Jul 2009 12:15

Re: Default Werte in Array?
 
Evtl. kommt es auch darauf an, wie man das Array deklariert. Als Feld einer Klasse wird es vermutlich genullt, als globale Variable vielleicht nicht. Aber das ist jetzt nur geraten und nicht ausprobiert, ein Blick im Debugger sollte aber Klarheit schaffen.

quendolineDD 30. Jul 2009 12:18

Re: Default Werte in Array?
 
Als lokales statisches Array stehen irgendwelche Werte drin. Als lokales Variables Array ist alles genullt.

aaaaaaaaaa_10 30. Jul 2009 12:29

Re: Default Werte in Array?
 
Hätte ich vlt. erwähnen sollen: Es ist ein globales dynamisches Array

mkinzler 30. Jul 2009 12:48

Re: Default Werte in Array?
 
Zitat:

Ich würde mich darauf aber nicht verlassen.
Deshalb ist es eigentlich egal.

aaaaaaaaaa_10 30. Jul 2009 12:54

Re: Default Werte in Array?
 
Nur zur Info. Es ist alles mit 0 gefüllt. Danke

mkinzler 30. Jul 2009 12:55

Re: Default Werte in Array?
 
Das hatte ich vermutet, aber wie gesagt darf man sich darauf nicht verlassen!

aaaaaaaaaa_10 30. Jul 2009 12:57

Re: Default Werte in Array?
 
Besser wäre es gewesen, da wäre nix drin gewesen. Kann man die Default Werte alle löschen?

worker 30. Jul 2009 12:57

Re: Default Werte in Array?
 
Als Nachtrag eine Übersicht:

Global, statisch, String -> alle Elemente leer
Global, dynamisch, String -> alle Elemente leer
Global, statisch, Integer-> alle Elemente 0
Global, dynamisch, Integer-> alle Elemente 0

Feld, statisch, String -> alle Elemente leer
Feld, dynamisch, String -> alle Elemente leer
Feld, statisch, Integer-> alle Elemente 0
Feld, dynamisch, Integer-> alle Elemente 0

Lokal, statisch, String -> alle Elemente leer
Lokal, dynamisch, String -> alle Elemente leer
Lokal, statisch, Integer-> alle Elemente zufällig
Lokal, dynamisch, Integer-> alle Elemente 0

Es gibt also nur einen Ausreißer.

Satty67 30. Jul 2009 12:58

Re: Default Werte in Array?
 
Zitat:

Zitat von aaaaaaaaaa_10
Nur zur Info. Es ist alles mit 0 gefüllt. Danke

Weil (wie meistens) der dafür reservierte Speicher bereits 0... stehen hatte oder weil delphi das array mit 0 initialisiert hat.

Wie mkinzler schreibt, sollte man prüfen (sofern es dringend nötig ist, das dort 0 drin steht), ob der Zustand zufällig oder kontrolliert ist.

Aber deswegen hattest Du ja gefragt, es wusste bisher nur noch keiner sicher wurde von der Realität überholt

mkinzler 30. Jul 2009 13:00

Re: Default Werte in Array?
 
Zitat:

Besser wäre es gewesen, da wäre nix drin gewesen. Kann man die Default Werte alle löschen?
Mit was? Irgendwas muss ja drinstehen.

aaaaaaaaaa_10 30. Jul 2009 13:00

Re: Default Werte in Array?
 
Danke Worker, das ist doch mal ne vernünftige Übersicht :thumb:

aaaaaaaaaa_10 30. Jul 2009 13:02

Re: Default Werte in Array?
 
ich mache vergleiche mit den arraywerten u.a. minimum und wenn da bereits eine 0 drin steht, dann sind ja meine werte immer größer und werden nie in das array übernommen

mkinzler 30. Jul 2009 13:04

Re: Default Werte in Array?
 
Dann musst du die Felder halt manuell mit dem Maximum des Datentyps bestücken.
BTW. bitte verwende die Edit-Funktion, denn Pushen mögen wir hier nicht.

aaaaaaaaaa_10 30. Jul 2009 13:05

Re: Default Werte in Array?
 
Oh entschuldige bitte. War ein Versehen. Werde mich bessern

Edit: Ganz sicher !

sirius 30. Jul 2009 13:06

Re: Default Werte in Array?
 
Zitat:

Zitat von mkinzler
Das hatte ich vermutet, aber wie gesagt darf man sich darauf nicht verlassen!

Das wirft eine Frage auf:
Warum sollte man sich nicht darauf verlassen? Beim initialisieren eines Objektes wie auch beim initialisieren eines dynamischen Arrays wird der Befehl fillchar (x,y,0) bereits von Delphi ausgeführt. Wenn man nun zwingend die 0 im Array benötigt, sollte man das fillchar dann noch ein zweites Mal ausführen?

Ja,
weil sicher ist sicher und irgendwann könnte ja CodeGear auf die Idee kommen und den Quellcode von DynArraySetLength zu ändern und das Fillchar rausnehmen.


Nein,
denn warum sollte man das jemals ändern und außerdem steht es ja in der Doku/Hilfe, dass der Inhalt 0 gesetzt wird. Sowas sind nur Performanceverluste, die nicht sein müssen.

himitsu 30. Jul 2009 13:35

Re: Default Werte in Array?
 
Sagen wir es mal so, die Array-Felder sind "nie" vorbelegt.

als globale Variable oder in einem Objekt:
der globale Variablen-Speicher und der Speicher von Objekten wird beim erstellen geNullt,
also wenn da zufällig ein statisches Array seine Elemente dort drin hat, dann ist es demnach auch automatisch indirekt mit 0en vorbelegt.

der Stack (lokale Variablen):
wird nicht initialisiert/geNullt

Speicher vom Speichermanager (via GetMem, z.B. der Inhalt von dynamischen Arrays):
wird ebenfalls nicht initialisiert/geNullt


Ausnahmen:
initialisierungspflichtige Typen, wie z.B. Strings, dynamische Arrays (der Array-Zeiger und nicht dessen Inhalt) oder Interfaces werden zu Initialisierung mit "nil" gefüllt.

und daraus kann man sich jetzt alle möglichen Szenarien basteln.


Grund ist, daß bei den "Ausnahmen" zur Speicherbehandlung ein definierter Wert gegeben sein muß, denn sonst wissen die Verwaltungsfunktionen nicht, ob sie einen alten Inhalt eventuell freigeben müssen.


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