Frage zu Arrays



  • Moin, ich hab vor einigen Tagen ein 4Gewinnt-Spiel programmiert und dann ist mir aufgefallen dass der Sieg eines spielers teilweise zufällig war.

    Wegen eines kleinen fehlers. die Sieges abfrage bei einer Diagole war

    int feld[7][6];
    
    if( feld[x][y]+feld[x+1][y+1]+feld[x+2][y+2]+feld[x+3][y+3]==(88*4) ) {
    // win
    }
    

    (88 weil Ascii 88 X ist und ich das quasi als Spielmarke genommen habe)

    naja bei einem 7*6 Feld kann man sich ja den Fehler denken. Wenn man Reihe 7 Wählt
    dann überprüft er die Ungültigen Arrays feld[7][y+1] feld[8][y+2] und feld[9][y+3] (Eingabe-1 wird benutzt)

    komme ich zu meiner frage: Ich habe das so gelernt das Arrays Felder sind die sich quasi einen Platz reservieren, so das in meinem Fall 7*6 also 42 Felder reserviert wären. Aber warum Arbeitet er dann noch mit Arrays bei denen x>=7 gilt? Man könnt reinthreoretisch einfach feld[1][1] defineiren und dann bis feld[±∞][±∞] benutzen oder? jetzt mal abgesehen davon dass es unsauber programmiert ist, was könnte dann passieren bzw warum sollte man das genau nicht machen?

    danke für eure antworten ^^



  • Wenn du ausserhalb der definierten Arraygrösse arbeitest, greifst du auf nicht reservierten Speicherplatz zu. Das führt zu undefiniertem Verhalten, das heisst, es kann funktionieren, oder zu einer Zugriffsverweigerung kommen. Wenn es bis jetzt funktioniert hat, war das reines Glück.



  • ah so. verstehe. thx


Log in to reply