_fux_
0
Erst Code, dann die Diskusion:
Hi C++'er:
Ich habe eben mal aus langeweile (warum weiß ich auch nemmer) obigen Code geschrieben.....
Kurz zu dem, wie ich das Programm oben verstehe:
bei einem Feld der länge 2, habe ich die Feldelement 0 und 1.
Wenn ich nun auf 2 etwas ändern will, zugreifen will ect... dann sollte ich doch eigentlich einen Abstutz bzw. eine Compilerwarnung/Fehlermeldung bekommen.
Unter VIsual Studio 2008 jedoch läuft das Programm.
Weiterhin wenn ich das Programm einfach laufen lasse (egal ob Release oder Debug) bekomme ich lauter 0en raus. Was ja eigentlich falsch sein müsste!
>>> STOP: mein fehler, die ersten Zahlen werden normal berechnet, danach 0er weil ich sicherlich den definitionsbereich der INT Zahlen überschreite.......
ABER:
starte ich nun das Programm wie oben beschrieben im DebugModus (mit F10 "Prodezurschritt") und ändere die Zeile 11 in:
dann dürfte ich doch nichts ausgegeben bekommen? (oder zumindest ein Fehler).
Jedoch rechnet der fleißig weiter.
Ist der Compiler hier einfach "schlau" und erweitert mein x um eine feldgröße im Arbeitspeicher?
Normalerweise dürfte das ja nicht passieren, oder?
Code:
#include <iostream>
using namespace std;
int main(){
int x[2]={1,2};
do{
x[0] = x[0] * 2;
x[1] = x[1] * x[0];
x[2] = x[0]*x[1];
cout << x[1] << ",";
}
while(1);
return 0;
}
Hi C++'er:
Ich habe eben mal aus langeweile (warum weiß ich auch nemmer) obigen Code geschrieben.....
Kurz zu dem, wie ich das Programm oben verstehe:
Code:
zu Zeile 5 int x[2]={1,2};
bei einem Feld der länge 2, habe ich die Feldelement 0 und 1.
Wenn ich nun auf 2 etwas ändern will, zugreifen will ect... dann sollte ich doch eigentlich einen Abstutz bzw. eine Compilerwarnung/Fehlermeldung bekommen.
Unter VIsual Studio 2008 jedoch läuft das Programm.
Weiterhin wenn ich das Programm einfach laufen lasse (egal ob Release oder Debug) bekomme ich lauter 0en raus. Was ja eigentlich falsch sein müsste!
>>> STOP: mein fehler, die ersten Zahlen werden normal berechnet, danach 0er weil ich sicherlich den definitionsbereich der INT Zahlen überschreite.......
ABER:
starte ich nun das Programm wie oben beschrieben im DebugModus (mit F10 "Prodezurschritt") und ändere die Zeile 11 in:
Code:
cout << x[2] << ",";
Jedoch rechnet der fleißig weiter.
Ist der Compiler hier einfach "schlau" und erweitert mein x um eine feldgröße im Arbeitspeicher?
Normalerweise dürfte das ja nicht passieren, oder?