Index außerhalb des gültigen Bereichs
|
17.04.2014, 13:56
(Dieser Beitrag wurde zuletzt bearbeitet: 17.04.2014 14:47 von hr3.)
Beitrag #1
|
|||
|
|||
Index außerhalb des gültigen Bereichs
Hallo,
habe gerade eine Erkenntnis (getestet mit IDE 1.0.5 und 1.5.5), die ich nicht glauben mag. Ich kann auf Elemente eines Arrays zugreifen die außerhalb des definierten (gültigen) Bereichs liegen, ohne eine Fehlermeldung zu bekommen. Dabei ist nicht nur abfragen sondern auch das zuweisen von Werten möglich. In anderen Sprachen/Entwicklungsumgebungen kommt die Fehlermeldung "Index außerhalb des gültigen Bereichs" oder ähnlich. Hier wird werden weder die Konstanten vom Compiler geprüft, noch bei der Ausführung (da könnten es auch Variablen sein) reagiert. Mir ist bewußt, dass ein Abbruch für einen irgendwo im Hintergrund laufenden Arduino, nicht die Lösung sein kann und sollte und auch keine Standardausgabe für ein Protokoll vorhanden ist. Allerdings könnten/sollten anstelle von zufälligen Werten aus dem Speicherbereich z.B. LowValues bereitgestellt und Updates müssen zwingend verhindert werden. Oder bin ich einem Irrtum aufgesessen? Es geht noch schlimmer. Auch die Division durch (konstante) NULL wird vom Compiler nicht erkannt und während der Laufzeit mit dem Ergebnis -1 ausgeführt. Auch 0 wäre falsch, aber aus meiner Sicht immer noch besser. Natürlich kann ich das alles selber vorher prüfen und durch Logik darauf reagieren. Bläht ein kleines Arduino-Programm nur unnötig auf, kostet Speicher und Performance und wer denkt schon immer daran, zumal es in anderen Umgebungen (Ausnahme Division durch (variable, konstante ist sowie Quatsch) 0) nicht erforderlich ist. |
|||
17.04.2014, 17:10
Beitrag #2
|
|||
|
|||
RE: Index außerhalb des gültigen Bereichs
Hallo hr3,
hört sich intressant an. Allerdings bringen deine Aussagen nicht soooviel, wenn die Codes die du verwendest nicht dabei sind. Sollten deine Aussagen stimmen (was zu testen wäre - wozu man widerum den Code bräuchte), wäre eine Mitteilung an die Entwickler bei diesen sicher willkommen. Auch wäre sinnvoll zu wissen mit welcher IDE Version auf welchem Betriebssystem du arbeitest. Grüße Ricardo Nüchtern betrachtet...ist besoffen besser ![]() |
|||
17.04.2014, 17:30
(Dieser Beitrag wurde zuletzt bearbeitet: 17.04.2014 17:55 von hr3.)
Beitrag #3
|
|||
|
|||
RE: Index außerhalb des gültigen Bereichs
Hallo,
IDE ist angegeben, XP sollte keinen Einfluß darauf haben. Code: int x=0; und noch ein Beispiel zum Array-Thema Code: int i[2][3]; Habe mittlerweile die Erkenntnis, dass das unter C++ wohl normal (gewollt) ist. |
|||
17.04.2014, 17:57
Beitrag #4
|
|||
|
|||
RE: Index außerhalb des gültigen Bereichs
Nur ganz kurz:
- in der Arduino IDE wird ein Subset der Sprache C benutzt - die Sprache C selbst kennt nur sehr wenige Möglichkeiten des Runtime / Error Trapping. - dies liegt schlicht daran, dass C als Low Level Sprache geschrieben wurde - Funktionen die nicht den eigentlichen Sprachumfang betreffen wurden also möglichst vermieden. Ergo der/die Programmierer/in muss sich selbst darum kümmern. Jedoch selbst wenn in C das Trapping für Devision by Zero enthalten wäre, würde der Arduino bzw. der Compiler keinen Übersetzungsfehler erzeugen. Das hat eine einfache Ursache: Die AVR-basierenden Microcontroller haben keine Division - Instructions on board. Division wird also über andere math. Verfahren "emuliert". Ergo weder ein Fehler im Syntaxcheck des Compilers, noch ein IDE-"Fehler" Grüße Ricardo[/code] Nüchtern betrachtet...ist besoffen besser ![]() |
|||
|
|
|
Möglicherweise verwandte Themen... | |||||
Thema: | Verfasser | Antworten: | Ansichten: | Letzter Beitrag | |
Array-Index zu groß: Tückisches Verhalten | GuaAck | 6 | 603 |
05.05.2017 22:03 Letzter Beitrag: Tommy56 |
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste