2017-03-04 4 views
0

私はコネクション4ゲームを作成しています。しかし、私がボードを作成していた方法は静的だったので、それは動的でなければならないので、メインプログラムで実装する前にこれを修正するためのサイドプログラムを作成しました。他-場合は何らかの理由で、もし&このコードの塊で条件文は、セグメンテーションフォールトを作成し、私はうまくボードをプリントアウトこれらの条件文をコメントするとき、私はなぜ...コネクション作成時のセグメンテーションフォルト4ボードCプログラム

// for the rows/columns of the board 
    for(row = num_rows - 1; row >= 0; row--){ 
     printf("|"); 
     for(col = 0; col < num_columns; col++){ 
     if(aPtr[row][col] == '0') { 
      printf("| X "); 
     } 
     else if(aPtr[row][col] == '1') { 
      printf("| O "); 
     } 
     else { 
       printf("| "); 
     }  
     } 
     puts("||"); 
    } 

を把握することはできません&このサイドプログラムの全体は以下であるこの

------ Connect *Four ------ 
Connect X Command Line Game 
&&===================&& 
|| | | | | || 
|| | | | | || 
|| | | | | || 
|| | | | | || 
|| | | | | || 
|| | | | | || 
|| | | | | || 
|| | | | | || 
|| | | | | || 
|| | | | | || 
&&===================&& 
    1 2 3 4 5 

のように見え、このセグメンテーション違反が発生している理由として、任意の洞察は理解されるであろう。

#include <stdio.h> 
      #include <stdlib.h> 
      #include <string.h> 
      #include <sys/stat.h> 


      void initialize(int num_rows, int num_cols, char **aPtr) { 
       int i, r, c; 

        // create the space for the board 
        aPtr = malloc(num_rows * sizeof(char*)); 

        for (i = 0; i < num_rows; i++){ 
         aPtr[i] = malloc(num_cols * sizeof (char)); 
        } 

        // go through the board and set all values equal to -1 
        for (r = 0; r < num_rows; r++) { 
         for (c = 0; c < num_cols; c++) { 
          aPtr[r][c] = '9'; 
          printf("%c", aPtr[r][c]); 
         } 
         printf("\n"); 
        } 
       } 


      void printBoard(int num_rows, int num_columns, char **aPtr) { 
       int row, col; 

       printf("\n"); 
       puts("------ Connect *Four ------"); 
       puts("Connect X Command Line Game"); 

       // for fancy top of board frame 
       printf("&&"); 
       for(col = 1; col < num_columns; col++) { 
       printf("===="); 
       } 
       printf("==="); 
       printf("&&\n"); 

       // for the rows/columns of the board 
       for(row = num_rows - 1; row >= 0; row--){ 
        printf("|"); 
        for(col = 0; col < num_columns; col++){ 
        // if(aPtr[row][col] == '0') { 
        //  printf("| X "); 
        // } 
        // else if(aPtr[row][col] == '1') { 
        // printf("| O "); 
        // } 
        // else { 
         printf("| "); 
        // }  
        } 
        puts("||"); 
       } 

       // for fancy bottom of board frame 
       printf("&&"); 
       for(col = 1; col < num_columns; col++) { 
       printf("===="); 
       } 
       printf("==="); 
       printf("&&\n"); 
       printf(" "); 
       if (col < 100){ 
        for(col = 0; col < num_columns; col++) { 
        if (col < 10) { 
         printf(" %d ", col + 1); 
        } 
        else { 
         printf("%d ", col + 1); 
        } 
       } 
       puts("\n"); 
       } 
      } 

      // ******************************************************************************************************* 
      // ******************************************************************************************************* 

      int main (int argc, char *argv[]) { 

       char **aPtr; 
       int height = 10; 
       int width = 5; 
       int i; 


       initialize(height, width, aPtr); 
       printBoard(height, width, aPtr); 
      } 
+1

'aPtr = ...'は呼び出し元側の変数を更新できません。 – BLUEPIXY

+0

@BLUEPIXYどのコード行を参照していますか? –

+0

'aPtr = malloc(num_rows * sizeof(char *));' – BLUEPIXY

答えて

0

これはコードの変更ですが、おそらくそれが役に立ちます。 aPtr[r][c] = '9';ので、あなたのボードは空ですが、あなたは0youのようなものになるだろうと言って、それを変更した場合::私はあなたがやっている&aPtr*aPtr = (char*) malloc(...)

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <sys/stat.h> 


void initialize(int num_rows, int num_cols, char **aPtr) { 
    int i, r, c; 

    // create the space for the board 
    *aPtr = (char*) malloc(num_rows * sizeof(char*)); 

    if(*aPtr == NULL) 
    { 
     free(*aPtr); 
     printf("Memory allocation failed"); 
    } 

    for (i = 0; i < num_rows; i++){ 
     aPtr[i] = (char *) malloc(num_cols * sizeof (char)); 
    } 

    // go through the board and set all values equal to -1 
    for (r = 0; r < num_rows; r++) { 
     for (c = 0; c < num_cols; c++) { 
      aPtr[r][c] = '9'; 
      printf("%c", aPtr[r][c]); 
     } 
     printf("\n"); 
    } 
} 


void printBoard(int num_rows, int num_columns, char **aPtr) { 
    int row, col; 

    printf("\n"); 
    puts("------ Connect *Four ------"); 
    puts("Connect X Command Line Game"); 

    // for fancy top of board frame 
    printf("&&"); 
    for(col = 1; col < num_columns; col++) { 
     printf("===="); 
    } 
    printf("==="); 
    printf("&&\n"); 

    // for the rows/columns of the board 
    for(row = num_rows - 1; row >= 0; row--){ 
     printf("|"); 
     for(col = 0; col < num_columns; col++){ 
       if(aPtr[row][col] == '0') { 
        printf("| X "); 
       } 
       else if(aPtr[row][col] == '1') { 
       printf("| O "); 
       } 
      else { 
       printf("| "); 
      } 
     } 
     puts("||"); 
    } 

    // for fancy bottom of board frame 
    printf("&&"); 
    for(col = 1; col < num_columns; col++) { 
     printf("===="); 
    } 
    printf("==="); 
    printf("&&\n"); 
    printf(" "); 
    if (col < 100){ 
     for(col = 0; col < num_columns; col++) { 
      if (col < 10) { 
       printf(" %d ", col + 1); 
      } 
      else { 
       printf("%d ", col + 1); 
      } 
     } 
     puts("\n"); 
    } 
} 

// ******************************************************************************************************* 
// ******************************************************************************************************* 

int main (int argc, char *argv[]) { 

    char *aPtr; 
    int height = 10; 
    int width = 5; 
    int i; 


    initialize(height, width, &aPtr); 
    printBoard(height, width, &aPtr); 
} 

ノートを渡していることに注意してください

------ Connect *Four ------ 
Connect X Command Line Game 
&&===================&& 
|| X | X | X | X | X || 
|| X | X | X | X | X || 
|| X | X | X | X | X || 
|| X | X | X | X | X || 
|| X | X | X | X | X || 
|| X | X | X | X | X || 
|| X | X | X | X | X || 
|| X | X | X | X | X || 
|| X | X | X | X | X || 
|| X | X | X | X | X || 
&&===================&& 
    1 2 3 4 5 

私はそれがあなたが期待していたと仮定していますか?

関連する問題