Kleine For-Schleife



  • Guten Abend,

    hab im Netz eine kleine For-Schleife gefunden:

    Terminiert das Programm und wenn nein, warum?
    
    int main (void)
    {
         int i;
         int a[8];
         for(i=0; i <= sizeof(a) ; i++)
              a[i]=0;
         return 0;
    }
    

    Nein es terminiert nicht. Aber ich verstehe nicht warum. Zuerst dachte ich, es müsste sizeof(a)/sizeof(int) heissen. Dann terminiert es aber immer noch nicht.Wenn ich es mit dem Debugger verfolge, läuft die Schleife von i=0 bis i=7 und dann wieder von vorne. Aber warum 😕
    thx


  • Mod

    Undefiniertes Verhalten ist undefiniert.

    Bei dir wird anscheinend der Wert von i überschrieben, wenn du auf a[8] (also hinter die Arraygrenze) zugreifst. Das ist vermutlich das hier beabsichtigte Verhalten (zu Lehrzwecken), muss aber nicht so passieren und wird auf vielen anderen Systemen auch nicht so passieren.



  • BulLit schrieb:

    Zuerst dachte ich, es müsste sizeof(a)/sizeof(int) heissen.

    Schonmal richtig gedacht. Dann mach mal aus dem <= noch ein <.



  • Also, sizeof(a)/sizeof(int) wäre schon mal nicht schlecht. Trotzdem zählst Du dann neun Elemente ab und das neunte Element ist bei dir zufällig die Zählvariable (das Programm könnte hier auch abschmieren oder sich sonstwie schräg verhalten). Die wird also wieder auf 0 zurückgesetzt und zack, deine Endlosschleife.



  • Danke für die schnelle Hilfe


Log in to reply