首页 > 解决方案 > 如何在 C 中重新分配/扩展二维数组?

问题描述

我正在做这个棋盘游戏,让玩家扩展棋盘的列或行:

这是在 main 中启动板的代码:

  char** tabuleiro = malloc(sizeof(char*) * linhas);
  for(i = 0;i < linhas; i++)
    tabuleiro[i] = malloc(sizeof(char*) * colunas);

这是在函数中启动 aux 的代码:

  char** insere_jogada(char** tab, jogador j, int* linhas, int*colunas){
  // (...)
  char** aux = tab;

这是将添加一行的代码:

  *linhas = *linhas + 1;
   aux = realloc(*tab, sizeof(char*)*(*linhas));
   //also tried: tab = malloc(sizeof(char*)*(*linhas));

   if(aux==NULL){
     printf("Error.\n");
     return tab;
   }

这是将添加列的代码:

*colunas = *colunas + 1;
for(i = 0;i < *colunas; i++){
  aux[i] = realloc(*tab, sizeof(char*)*(*colunas));     

整体功能:

char** insere_jogada(char** tab, jogador j, int* linhas, int*colunas) {
  int l,c,i;
  char resposta, escolha;
  char** aux = tab;

  pede_espaco(&l,&c); // espaco q o jogador quer jogar
  resposta = check_jogada(tab[l][c], j); //jogada

  if(resposta=='A'){ // se escolher adicionar lin/col
    j.lincol--; //fica sem oportunidade de adicionar mais linhas/colunas

    escolha = pede_lincol(); // escolher entre adicionar linha ou coluna
    if(escolha == 'L'){
      printf("\nLines before %d",*linhas);
      *linhas = *linhas + 1;
       printf("\nLines after %d",*linhas);

      // ----
        aux = realloc(*tab, sizeof(char*)*(*linhas));
        //also tried: tab = malloc(sizeof(char*)*(*linhas));

        if(aux==NULL){
          printf("Error.\n");
          return tab;
        }
      //

    }
    else{
      *colunas = *colunas + 1;
      for(i = 0;i < *colunas; i++){
        aux[i] = realloc(*tab, sizeof(char*)*(*colunas));        
      }
    }
  }
  else{
    tab[l][c] = resposta;
  }

  return aux;
}

PS:提前感谢您的时间和耐心。这对我来说是一个新话题,如果我犯了一个明显/愚蠢的错误,请原谅我。:)

标签: cmemorymultidimensional-arraydynamic-memory-allocation

解决方案


推荐阅读