Frage zu Arrays
-
Hi,
irgend wie bin ich mir immer noch nicht ganz sicher wie viele Elemente bei folgendem Code angelegt sind:
int MyArray[10];Heißt das, dass 10 Elemente ( 0 bis 9 ) oder 11 Elemente ( 0 bis 10 ) angelegt sind?
Da C++ erst mal im Programm weiter läuft und nicht abstürtzt wenn ich über den angevorderten Speicher hinausgehe weiß ich das bis heute nicht so genau.
Bisher habe ich immer nur - von diesem Beispiel ausgehend - von 0 bis 9 genommen.Kann mir jemand sagen was richtig ist?
-
Es werden soviele Elemente angelegt, wie du in dem Klammern angibst (also im Beispiel 10, Index 0-9).
-
Das verhalten ist imo undefiniert wenn du das letzte Element +1 ansprichst.
int arr[10]; for(int i=0;i<11;++i) // undefiniert, sollte man aber lassen! { arr[i]=i; cout<<arr[i]<<endl; } for(int i=0;i<12;++i) // geht nicht mehr, Absturz { /* */ }
-
Das verhalten ist imo undefiniert wenn du das letzte Element +1 ansprichst.
Das ist ein sehr falscher gebrauch von imo.
- Wohl eher afaik.:)Aber recht hast du. Das Verhalten ist undefiniert. Sprich es kann alles gut gehen und das Programm läuft weiter, oder es gibt (öfter) eine Hardware Exception. Sprich das Programm wird abgebrochen und (Windows, oder was auch immer) bringt dir dann einen Fehler, dass da auf nicht genutzen Speicher zugegriffen wird.
-
drakon schrieb:
Das ist ein sehr falscher gebrauch von imo.
- Wohl eher afaik.:)Da hast Du imho Recht

-
drakon schrieb:
Aber recht hast du.
XHansWurstX schrieb:
Da hast Du imho Recht

Hey hey, ihr habt beide Recht!

-
_matze schrieb:
drakon schrieb:
Aber recht hast du.
XHansWurstX schrieb:
Da hast Du imho Recht

Hey hey, ihr habt beide Recht!

ACK.
Aber b2t.
Obwohl ich bin atm afk.
-
Okay, danke

-
drakon schrieb:
Sprich es kann alles gut gehen und das Programm läuft weiter, oder es gibt (öfter) eine Hardware Exception.
Oder es kann auch keine Exception oder Zugriffsverletzung geben und man überschreibt Daten, die man anderswo benötigt. Solche Fehler, die sich quer durch das halbe Programm erstrecken, sind meistens auch sehr schwer zu finden.
drakon schrieb:
ACK.
Aber b2t.
Obwohl ich bin atm afk.Oh rly? :p
-
Ya'rly
-
kk.

-
kkthxbye heißt das.

-
Nexus schrieb:
Oder es kann auch keine Exception oder Zugriffsverletzung geben und man überschreibt Daten, die man anderswo benötigt. Solche Fehler, die sich quer durch das halbe Programm erstrecken, sind meistens auch sehr schwer zu finden.
Deswegen ein Thx von mir, für eure Tips, öfter mal STL-Container statt Arrays zu nehmen. War eine gewaltige und sinnvolle Umstellung

w00t