2016-11-08 14 views
-3

私のコードに何が問題なのですか?それはボードを表示した後にクラッシュします。文字の機能に何か間違いはありますか?私はこれを少なくとも1時間混乱させましたが、私はまだ問題が何かを知ることができません。ここでシンプルなCプログラムがクラッシュする

は私のコードです:

#include <stdio.h> 

void gameboard(char board[8][8]) 
{ 

int x, y; 

    for(x=0; x<16; x++) 
    { 
    for(y=0; y<8; y++) 
    { 
    if(x % 2 == 0) 
    { 
    printf(" %c ", board[x][y]); 
    }else{ 
    printf("| %c |",board[x][y]); 
    } 

    }printf("\n"); 

    } 




} 
void character(char board[8][8]) 
{ 
int x,y; 

for(x=0;x<16;x++){ 
    for(y=0;y<8;y++){ 

    if(x<6){ 

     if(x%2 == 0){ 
       if(x%2 == 0){ 
       board[x][y] = ' '; 

       } 
      } 



     if(x%2 == 1){ 
       if(y%2 == 0){ 
       board[x][y] = 'O'; 
       } 
       if(y%2 ==1){ 
      board[x][y]= ' '; 

       } 
     } 

     if(x==3){ 
     if(y%2 == 1){ 
     board[x][y] = 'O'; 
     } 
     if(y%2 == 0){ 
     board[x][y] = ' '; 
     } 
     } 
    } 

    if((x==6)||(x==7)||(x==8)||(x==9)){ 
    board[x][y] = ' '; 
    } 


    if(x>9) 
    { 

     if(x%2 == 0){ 
       if(x%2 == 0){ 
       board[x][y] = 'X'; 

       } 
       if(y%2 == 0){ 
       board[x][y] = ' '; 
      } 

     } 

     if(x%2 == 1){ 
       if(y%2 == 1){ 
       board[x][y] = ' '; 
       } 

     } 
     if(x==12){ 
     if(y%2 == 0){ 
     board[x][y] = 'X'; 
     } 
     if(y%2 == 1){ 
     board[x][y] = ' '; 
     } 

     } 

    }    

    } 
} 
} 



int main() 
{ 

    char bx[8][8]; 




    character(bx); 

    gameboard(bx); 




return 0; 

} 
+2

デバッガでコードをステップしましたか?あなたはおそらく、配列の範囲外のインデックスを作成しています。適切なデバッグ技術を学ぶことは、言語を学ぶことと同じくらい重要です。 – OldProgrammer

答えて

2

あなたのボードには、8×8の要素があります。

char bx[8][8]; 

あなたがボードで物事を行うと、あなたはX = 16に要素をアクセスアップ:

for(x=0;x<16;x++){ 
    ... 
    board[x][y] = ' '; 

したがって、board配列の範囲外にアクセスし、0123に属していない他のメモリを上書きします。そのメモリに重要な要素が含まれていると、プログラムがクラッシュする可能性があります。

関連する問題