[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 = 90
    

    Ich 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.


Anmelden zum Antworten