Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi setlength(array,0); setlength(array,10); (https://www.delphipraxis.net/29611-setlength-array-0-%3B-setlength-array-10-%3B.html)

der_boss 11. Sep 2004 20:58


setlength(array,0); setlength(array,10);
 
Liebe MitprogrammiererInnen,

die Gewissensfrage: Wenn ich ein dynamisches Aray (Double/Integer) erst auf Länge null setze und dann aufspreize, ist dann sichergestellt, dass die Elemente gleich null sind?

Was ich bis jetzt beim Debuggen gesehen habe, ist es so. Die Hilfe ist leider in einem riesigen Satz formuliert, der nicht ganz eindeutig für mich ist. Wie denkt ihr drüber?

War es immer Zufall, dass die Elemente immer Null sind?

Delphi-Quellcode:
var
   MyArray    : array of double
   rate_mal   : double;
begin
   setlength(MyArray,0);
   setlength(MyArray,10);
   rate_mal   := MyArray[5];
end;
[edit=sakura] [delphi]Tags Mfg, sakura[/edit]

Matze 11. Sep 2004 21:03

Re: setlength(array,0); setlength(array,10);
 
Geht nicht einfach

Delphi-Quellcode:
ArrayName := nil;

jfheins 11. Sep 2004 21:07

Re: setlength(array,0); setlength(array,10);
 
1. Benutz doch bitte [delphi]-Tags
2.
Zitat:

ist dann sichergestellt, dass die Elemente gleich null sind
Ich würde mich nicht darauf verlassen. (>> Ich glaube nicht.)
Ich glaube, man muss das so machen:
Code:
MyArray := setlength(MyArray,0);
Edit: Warum zum Teufel gehen diese verdammten [delphi]-Tags nicht ???
[pre]Dieser Text steht in Delphi-Tags[/pre]

Matze 11. Sep 2004 21:22

Re: setlength(array,0); setlength(array,10);
 
[OT]Gehen sie bei dir nicht?
Bei mir ahben sie funktioniert.[/OT]

alcaeus 11. Sep 2004 21:49

Re: setlength(array,0); setlength(array,10);
 
Zitat:

Zitat von der_boss
ist dann sichergestellt, dass die Elemente gleich null sind?

AFAIK nicht, denn irgendwo im RAM wird Speicher für die Elemente reserviert, und der muss nicht immer Null sein. Nicht-Initialisierte Variablen sollten sowieso ein Tabu sein!

Greetz
alcaeus

himitsu 11. Sep 2004 22:23

Re: setlength(array,0); setlength(array,10);
 
Ich glaub die einzigen Variablen, welche beim Start sozusagen auf 0 stehen sind die Globalen die Lokalen sind so, wie si gerade Lust haben.

Also mach, was alcaeus sagt und initialisiere die gefälligst vorher.

Code:
var
  MyArray : array of double
  rate_mal : double;
  i       : integer;
begin
  setlength(MyArray,10);
  [color=red]for i := 0 to high(MyArray) do MyArray[i] := 0;[/color]
  rate_mal := MyArray[5];
end;

dizzy 11. Sep 2004 23:27

Re: setlength(array,0); setlength(array,10);
 
Globale Variablen und Objektfelder sind Nullinitialisiert bzw. so wie es gerade dem Typ als "leer" entspricht. (Numerische Werte = 0; Booleans = false; String und ShortString = ''; Pointer = nil; usw...)
Bei lokalen Variablen kann man sich, wie gesagt, nie darauf verlassen! Auch wenn du das Array erst wieder verkleinerst, bzw. gerade dann nicht. Mit etwas Pech wird ein völlig neuer Speicherbereich alloziiert in dem alles möglich drin stehen kann, und im günstigsten Fall wird das Array am selben Offset wie vorher anfangen. Dann hast du halt deine alten Werte drin, und was dahinter steht ist wieder ein Fall für nen Wahrsager ;).
Um eine Initialisierungsschleife wirst du nicht rum kommen.

gruss,
dizzy

Luckie 12. Sep 2004 08:07

Re: setlength(array,0); setlength(array,10);
 
Zitat:

Zitat von himitsu
Code:
  [color=red]for i := 0 to high(MyArray) do MyArray[i] := 0;[/color]

Ich halte mit ZeroMemory dagegen

Sprint 12. Sep 2004 09:13

Re: setlength(array,0); setlength(array,10);
 
Zitat:

Zitat von der_boss
War es immer Zufall, dass die Elemente immer Null sind?

Nein. Das ist kein Zufall. Die sind immer Null.

alcaeus 12. Sep 2004 09:21

Re: setlength(array,0); setlength(array,10);
 
Hi Sprint,

Zitat:

Zitat von Sprint
Nein. Das ist kein Zufall. Die sind immer Null.

kannst du deine Aussage begründen? Nach den vorherigen Aussagen ist dies ja anscheinend nicht der Fall ;)

Greetz
alcaeus


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:23 Uhr.
Seite 1 von 2  1 2      

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