2016-12-27 208 views
0

这是我的完整代码。任何帮助将非常感激。C:为什么会出现分段错误(核心转储)错误

(常量这里定义)

结构

typedef struct word{ 
    char name[16]; 
    char orientation; 
    int row; 
    char col; 
    int player; 
    int points; 
}WORD; 

typedef struct piece{ 
    char letter; 
    int points; 
}PIECE; 

typedef struct player{ 
    char name[20]; 
    int points; 
    PIECE hand[7]; 
}PLAYER; 

typedef struct game{ 
    WORD words[50]; 
    PLAYER players[2]; 
    PIECE pool[115]; 
    char board[15][15]; 
    char dictionary [27718][16]; 
    char turn; 
    int word_count; 
}GAME; 

功能用于显示板。必须获得GAME类型的结构。
空隙show_board(GAME游戏){

int i,j,row,col,orient; 
    int colour,letter1,letter2; 
    int board[17][17] = {{-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,-1}, 
         (...) 
{-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,-1}}; 

    char game_board[BOARD_SIZE][BOARD_SIZE]; 
    for(i=0;i<BOARD_SIZE;i++) 
    { 
     for(j=0;j<BOARD_SIZE;j++) 
      game_board[i][j] = ' '; 
    } 

    for(i=0;i < game.word_count;i++) 
    { 
     row = game.words[i].row - 1; 
     col = game.words[i].col - 'A'; 
     orient = game.words[i].orientation; 

     for(j=0;game.words[i].name[j] != '\0';j++) 
     { 
      game_board[row][col] = game.words[i].name[j]; 
      if(orient == 'v') 
       row++; 
      else if(orient == 'h') 
       col++; 
     }  
    } 

    for(row = 0;row < MAX_ROWS;row++) 
    { 
     for(col = 0;col < MAX_COLS;col++) 
     { 
      switch(board[row][col]){  
       case WHT: colour = BG_WHITE;break; 
       case RED: colour = BG_RED;break; 
       case LBL: colour = BG_CYAN;break; 
       case PNK: colour = BG_MAGENTA;break; 
       case BLU: colour = BG_BLUE;break; 
       case YEL: colour = BG_YELLOW;break; 
       default: colour = BG_BLACK;break; 
      } 
      if((row == 0 && col == 0) || row == 0 && col == 16 || row == 16 && col == 0 || row == 16 && col == 16){ 
       printf("%c[%d;%dm %c%c %c[%dm",ESCAPE,FONT_WHITE,colour,' ',' ', ESCAPE, 0);  
      }else if((row == 0 || row == 16) && (col!= 0 || col!= 16)){ 
       letter1 = board[row][col];  
       printf("%c[%d;%dm %c %c[%dm",ESCAPE,FONT_WHITE,colour,letter1, ESCAPE, 0); 
      }else if((col == 0 || col == 16) && (row != 0 || row != 16)){    
       if(board[row][col] > 9) 
       { 
        letter1 = 1 + '0'; 
        letter2 = board[row][col]%10; 
        letter2 = letter2 + '0'; 
       }else{ 
        letter2 = board[row][col] + '0'; 
        letter1 = ' '; 
       }         
       printf("%c[%d;%dm %c%c %c[%dm",ESCAPE,FONT_WHITE,colour,letter1,letter2, ESCAPE, 0);        
      }else{ 
       letter1 = ' '; 
       if(game_board[row-1][col-1]!=' '){ 
        letter1 = game_board[row-1][col-1]; 
       }  
       if(letter1 != ' ') 
        colour = BG_YELLOW;  
       printf("%c[%d;%dm %c %c[%dm",ESCAPE,FONT_BLACK,colour,letter1, ESCAPE, 0); 
      }   
     } 
     putchar('\n');  
    } 
    putchar('\n'); 
} 

MAIN INT主(){ GAME游戏; show_board(game); }

+2

可能是一个堆栈溢出。典型的堆栈大小是在低兆字节的范围内,而你的字典已经是半兆字节。不知道“WORD”,“PLAYER”和“PIECE”中的内容。 – user3386109

+0

那我该如何解决呢? –

+2

用malloc分配游戏:'GAME * game = malloc(sizeof(GAME));'。 –

回答

0

我不确定它是否满足此处,但是您可以为此structure动态分配所有array的内存。通过这样做你将分配内存heap,这样做可以防止你从stackoverflow

提供一个链接。请测试它。

http://www.geeksforgeeks.org/struct-hack/