Index in for Schleife



  • Bin ich da im richtigen Film??
    Hier ein kleines Codeschnipsel:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        int i;
        int a[5];
        int b;
        for (i=0;i<=4;i++)
        {
            a[i] = rand();
            // [...mach irgendwas...]
            // if (a[i] = irgendwas) break;
            b = a[i];
        }
        printf("%d %d",a[i],b);
        return 0;
    }
    

    Beim Compilieren mit Mingw und Codeblocks kommt folgende Warning:

    main.c|16|warning: array subscript is above array bounds|

    Wenn ich das Programm ausführe bringt der "printf" folgendes:

    4200128 19169

    Also ist der Index "i" weg.... oder??

    Muss ich wie im vorliegenden Beispiel (wo mir das Problem auffiel, war ein anderes Programm) also tatsächlich den Wert zwischenspeichern (hier b), da ich ausserhalb der Schleife nicht mehr auf "i" zugreifen kann??

    Vielen Dank im voraus



  • Muss ich wie im vorliegenden Beispiel (wo mir das Problem auffiel, war ein anderes Programm) also tatsächlich den Wert zwischenspeichern (hier b), da ich ausserhalb der Schleife nicht mehr auf "i" zugreifen kann??

    Sicher kann i weiterverwendet werden, aber sieh es mal so: die Abbruchbedingung lautet i<=4 , nach jedem Durchlauf wird i inkrementiert, also ist i folglich nach der Schleife 5, und 5 liegt außerhalb deines Arrays, nicht wahr?



  • Oder so?

    printf("%d %d %d\n", i, a[i], b);
    

    Da ist immer noch der Indexfehler, aber du siehst warum.



  • Danke! - klaro - der Index wird 5.
    Naja der Mingw meckert - der GCC unter Linux nicht...

    Das sind natürlich so richtige Sch!*"# Programmierfehler.

    Besten Dank



  • Der MinGW ist auch ein GCC.
    Du musst nur die richtigen Warnlevels aktivieren.
    Z.B. -Wall


Anmelden zum Antworten