![]() |
Delphi-Version: XE5
Vorsicht! statisches Array mit Startindex>0
Hi!
Es gibt die Möglichkeit statische Arrays (Typ egal) bei z.B. bei Index 1 anfangen zu lassen. Macht man dies und greift in einer Schleife- weil man es gewöhnt ist und es schneller zu tippen ist- mit Startindex 0 zu, liefert das dann falsche Werte. Halte ich für brandgefährlich. Vieleicht ist das für viele eine olle Kamelle, aber mir war das so nicht bewusst und ich werde in Zukunft lieber mit Low() und High() arbeiten und würde dies auch jedem empfehlen. Codebeispiel Konsolenanwendung:
Delphi-Quellcode:
Ergibt:
program Project1;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils; var Arr : Array [1..2] of Boolean; i : Integer; begin try { TODO -oUser -cConsole Main : Code hier einfügen } Arr[1] := True; Writeln(BoolToStr(Arr[1])); Arr[2] := True; Writeln(BoolToStr(Arr[2])); Writeln(''); //Writeln(BoolToStr(Arr[0])); // Zur Kompilierzeit [dcc32 Fehler] Project1.dpr(20): E1012 Konstantenausdruck verletzt untere Grenzen for I := 0 to High(Arr) do Writeln(BoolToStr(Arr[i])); Writeln(''); for I := Low(Arr) to High(Arr) do Writeln(BoolToStr(Arr[i])); Readln; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. -1 -1 0 -1 -1 -1 -1 |
AW: Vorsicht! statisches Array mit Startindex>0
Brandgefährlich ist es auch ein Sprung vom 5-Meter-Turm ohne sich vergewissert zu haben, dass sich ausreichend Wasser im Becken befindet :roll:
Du kannst bei den Optionen die Bereichsprüfung einschalten, dann schmeisst dir der Compiler um die Ohren und schwups ist der brand gelöscht (hat es gebrannt?) |
AW: Vorsicht! statisches Array mit Startindex>0
Zitat:
Wie definierst Du den Array für die Tage in einem Monat? Array[1..31] Oder für andere Werte Array[-7..7] Das dynamiche Arrays immer bei Null anfangen ist eher läßtig und bring noch eine ganz andere Gefahr mit: Beispiel:
Delphi-Quellcode:
Na wer findet die Exception?
type
TA : Array of Ansichar; TB : Array [0..200] of Ansichar; var A : TA; B : TB; S : Shortstring; begin S := 'Cooler Text'; Setlength(A,201); Move(S[1],A,length(S)); Move(S[1],B,length(S)); end; Mavarik |
AW: Vorsicht! statisches Array mit Startindex>0
Hier ein etwas kürzeres Beispiel:
Delphi-Quellcode:
Ohne mich dem Spott anschließen zu wollen:
program Project22;
{$APPTYPE CONSOLE} uses System.SysUtils; type TStaticArray = array[5..10] of Integer; var meinArray: TStaticArray; arrayIndex: Integer; begin for arrayIndex := -5 to 99 do WriteLn( meinArray[arrayIndex] ); end. Ja, eigentlich sollte man immer mit Low() und High() arbeiten statt magische Zahlen hinzutippen. Und ja, wenn man die Bereichsprüfung aus hat bekommt man zur Laufzeit keinen Fehler. Aber man sollte trotzdem anmerken dass es wirklich etwas ernüchternd ist dass der Compiler für so etwas offensichtliches keine Warnung ausgeben kann. |
AW: Vorsicht! statisches Array mit Startindex>0
Zitat:
|
AW: Vorsicht! statisches Array mit Startindex>0
Doch, der Compiler/Programm kann "Exceptions" werfen, aber wenn du die Bereichsprüfung nicht aktivierst... :roll:
[edit] siehe Sir Rufo Und dann natürlich die genannten For-In und Low-High.
Delphi-Quellcode:
Dafür kennt Delphi keine leeren/undefinierten statischen Arrays ala
for i in meinArray do
WriteLn(i);
Delphi-Quellcode:
und man sieht öfters mal ein
array[0]
Delphi-Quellcode:
, wo man es ja will, daß man über die 0 hinaus kann.
array[0..0]
|
AW: Vorsicht! statisches Array mit Startindex>0
Zitat:
Zitat:
Warum dieser Sarkasmus? Habe ich was falsches gemacht als ich das für andere Programmierende, die auch nicht so viel Erfahrung haben wie ihr, erwähnt habe? Denk mal darüber nach wie viel Spaß das aktive Teilnehmen im Forum noch für Anfänger macht wenn sich die Altherrenrunde über mich und andere so lustig macht. Zitat:
Zitat:
Delphi-Quellcode:
und was willst du damit sagen?
Move(S[1],A[0],length(S));
|
AW: Vorsicht! statisches Array mit Startindex>0
Zitat:
Delphi-Quellcode:
Funktioniert doch...
Move(S[1],B,length(S));
Zitat:
Eigentlich müsste es bei Dynamischen Array immer mit ^ geschrieben werden, da es sich nicht mehr um Speicherbereich handelt, sondern plötzlich um einen "Zeiger"... Mavarik |
AW: Vorsicht! statisches Array mit Startindex>0
Zitat:
|
AW: Vorsicht! statisches Array mit Startindex>0
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz