[gelöst] Variable gibt falschen Wert aus
-
Hallo,
ich habe ein Problem mit einer int-Variable die einen anderen Wert ausgibt als Sie haben sollte:
#include <iostream> using namespace std; int main( void ) { int array[10]; int xMal = 9; for( size_t i = 0; i <= 10; i++ ) { array[i] = (i+1) * xMal; } for( size_t i = 0; i < (sizeof(array)/sizeof(int)); i++) { cout << i+1 << " mal " << xMal << " = " << array[i] << endl; } return 0; }Das Programm gibt mir bei der Ausführung das hier aus:
1 mal 99 = 9 2 mal 99 = 18 3 mal 99 = 27 4 mal 99 = 36 5 mal 99 = 45 6 mal 99 = 54 7 mal 99 = 63 8 mal 99 = 72 9 mal 99 = 81 10 mal 99 = 90Ich kann mir nicht erklären warum xMal den Wert 99 statt 9 ausgibt, witziger Weise wird der richtige Wert ausgegeben wenn ich xMal als const int definiere.
Ich benutze den g++ Compiler unter Linux.
Hat jemand eine Idee was da schief läuft?
-
GCC unter Linux: http://ideone.com/I2bcm
Funktioniert doch.
-
Mach in Zeile 9 aus dem "<=" ein "<", dann gibt g++ mir nicht mehr 99 aus.
array[10] gibt es ja bei dir nicht mehr, es sollte ja nur bis [9] laufen. Dein Rechner wird an dieser Speicherstelle wohl xMal gespeichert haben (also direkt hinter dem array). Durch "<=" greifst du auf array[10] zu, was den Wert von xMal ersetzt (10+1 * 9 = 99)
-
314159265358979 schrieb:
GCC unter Linux: http://ideone.com/I2bcm
Funktioniert doch.Ich nutze als IDE Netbeans, da trat das "Problem" nur auf wenn ich das Programm im Debug-Mode kompiliert habe. Sorry das meine Angaben so unpräzise waren.
Cassiopeia schrieb:
Mach in Zeile 9 aus dem "<=" ein "<", dann gibt g++ mir nicht mehr 99 aus.
array[10] gibt es ja bei dir nicht mehr, es sollte ja nur bis [9] laufen. Dein Rechner wird an dieser Speicherstelle wohl xMal gespeichert haben (also direkt hinter dem array). Durch "<=" greifst du auf array[10] zu, was den Wert von xMal ersetzt (10+1 * 9 = 99)
Ups, der berühmte Zaunpfahl, da lag also das Problem. Vielen Dank für die Hilfe.
-
nein, das ist undefiniertes verhalten.
du hast nur zufällig glück gehabt, dass hinter dem array direkt deine xMal variable liegt im speicher...
-
314159265358979 schrieb:
Funktioniert doch.
Wenn du mit einem Runtime Error funktionieren meinst.
Wieso nicht
-
Darauf hab ich jetzt nicht geachtet, aber 9 steht da.