Неизвестное поведение после вставки строки в 3D-массив (C LANGUAGE) - PullRequest
1 голос
/ 08 июля 2020

Я пытаюсь создать динамическую c доску, которая перемещается каждый раз, когда пользователь вводит строку «A1» определенным c способом, вот мой код:

    struct game{
  int *linha;
  int *coluna;
};



typedef struct game game;

void clean_buffer();

int main(void) {
  game *game;
  int selector = 1,row,col,i,j;
  game->linha = (int*) malloc(sizeof(int));
  game->coluna = (int*) malloc(sizeof(int));
  *game->linha = 3;
  *game->coluna = 3;

  char tabuleiro[*game->linha][*game->coluna][3];

  for( i = 0; i< *game->linha ; i++){
    for( j = 0; j < *game->coluna ; j++){
      strcpy(tabuleiro[i][j]," ");
    }
  }

  while(selector){
    printf("\nType the position you wanna play:");
    scanf("%d",&row);
    scanf("%d",&col);
    strcpy(tabuleiro[row][col],"A1");
if(col == *game->coluna - 2){
      (*game->coluna)++;
      game->coluna = (int*) realloc(game->coluna,sizeof(int)*(*game->coluna));
      for(i=0;i<*game->linha; i++){
        strcpy(tabuleiro[i][*game->coluna-1]," ");
      }
    }
    for(i=0;i<*game->linha;i++){
      for(j=0;j<*game->coluna;j++){
        printf("%s|",tabuleiro[i][j]);
      }
      printf("\n");
    }
    printf("\nDo you wanna stop? (0 for yes)");
    clean_buffer();
    scanf("%d",&selector);
  }
}       

void clean_buffer(){
int c;
do{
    c = getchar();
}while(c != EOF && c != '\n');

}

Человеку нужно для выбора позиции, и в выбранной доске появляется строка «А1». Но после нескольких вариантов strcpy начинает копировать "A1" в места, где он не должен был. Например, если пользователь вводит позицию 0 0, позицию 0 1, позицию 0 2 и позицию 0 3, после позиции 0 3 он печатает строку «A1» в позиции 1 0, и если пользователь вводит позицию 0 4 , он будет печатать в позиции 0 4 и в позиции 1 1. Такое поведение продолжается до остановки программы. Кто-нибудь может мне помочь? Я понятия не имею, что происходит не так. «linha» означает «ряд», «coluna» означает «col», а «tabuleiro» означает «доска»

Пример этого можно увидеть в: https://prnt.sc/teaay9 (I ' м ниже 10 репутации, потому что я здесь новенький, поэтому я не могу размещать изображения)

1 Ответ

0 голосов
/ 08 июля 2020

В строке

strcpy(tabuleiro[i][*game->coluna - 1], " ");

вы получаете доступ к столбцу с индексом 3, но массив tabuleiro имеет только три столбца (0, 1 и 2).

...