kein Arrayüberlauf
-
Hi,
ich zweifle gerade mal wieder an mir selbst bzw. daran was hier passiert:
// mb.cpp #include <iostream> using namespace std; int main() { double array[5]; for(int i = 0; i < 10; ++i) { cout << i << endl; array[i] = i; } cout << "For Schleife geschafft" << endl; array[6] = 6; cout << "array[6] = 6 geschafft" << endl; array[7] = 6; return 0; }
Ich kompiliere das ganze dann schließlich brav und erhalte die Ausgabe:
g++ -Wall -pedantic -ansi -c mb.cpp g++ -o "mb" mb.o ./mb 0 1 2 3 4 5 For Schleife geschafft array[6] = 6 geschafft Speicherzugriffsfehler
Und jetzt bin ich einfach baff!
Warum wird die for-Schleife bis 5 durchlaufen und danach kommt nichts mehr? Warum erhalte ich keinen Fehlermeldung Speicherzugriffsfehler? Ich hätte erwartet spätestens für i = 5 => array[i] hätte ich einen Fehler bekommen. Mein Array wird mit fünf Elementen initialisiert, d.h. startend bei der Null sollte für i = 4 Schluß sein!
Und warum wird noch array [6] = 6 geschafft? Gleiche Situation.
Und für array[7] = 6 kriege ich dann einen Speicherzugriffsfehler?!?!
Irgendwas läuft hier doch verdammt schief oder ich sehe die Trivialität nicht.
Gruß,
Klaus.
-
Du bist im flaschen Unterforum. Hier ist C++/CLI mit .NET, das ist eine andere Sprache als C++.
Zu deiner Frage:
Das Verhalten bei ungueltigem Indexzugriff ist undefiniert. Das heisst es ist nicht klar spezifiert was passiert. Das Programm kann abstuerzen, es kann weiterlaufen mit falschen Werten etc. Jemand hier im Forum meinte mal, dass dir der Computer im besten Fall eine Pizza bestellt
-
icarus2 schrieb:
Du bist im flaschen Unterforum. Hier ist C++/CLI mit .NET, das ist eine andere Sprache als C++.
Oh ja, bite entschuldige. War so auf das C++ fixiert ...
icarus2 schrieb:
Zu deiner Frage:
Das Verhalten bei ungueltigem Indexzugriff ist undefiniert. Das heisst es ist nicht klar spezifiert was passiert. Das Programm kann abstuerzen, es kann weiterlaufen mit falschen Werten etc. Jemand hier im Forum meinte mal, dass dir der Computer im besten Fall eine Pizza bestelltEcht? So krass?
Ich weiß ja, dass ich als Laie wenig bis gar keine Ahnung habe, aber das da generell keine Fehlermeldung kommt irritiert mich doch sehr.
Oder ist das konzeptionell zu schwierig?
Gruß,
Klaus.
-
In computer programming, undefined behavior is a feature of some programming languages—most famously C.[1] In these languages, to simplify the specification and allow some flexibility in implementation, the specification leaves the results of certain operations specifically undefined.
Quelle: Undefined Behavior - Wikipedia
Ich hoffe es macht nichts, dass der Text auf englisch ist.
-
icarus2 schrieb:
Ich hoffe es macht nichts, dass der Text auf englisch ist.
Nein überhaupt nicht.
Es stellt nur gerade mein Weltbild auf den Kopf, da ich das Programmieren immer als sehr penibel angesehen habe.
Und dass dies jetzt als Feature dargestellt wird, das ist krass.
Na ja.
Auf jeden Fall danke.
Dann programmier ich mal munter weiter mit der Gewissheit, dass es diesmal zumindest nicht an mir liegt.
Gruß,
Klaus.