c - 如何在 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:提前感谢您的时间和耐心。这对我来说是一个新话题,如果我犯了一个明显/愚蠢的错误,请原谅我。:)
解决方案
推荐阅读
- swift - 具有图像调整大小问题的动态单元格
- dart - 如何退出/终止正在进行的未来?
- c# - 将多个主体发布到 Web api 控制器
- react-native - 我可以在 Expo 中创建自己的 DocumentPicker UI 吗?
- sql-server - 报表服务配置管理器无法启动当前报表服务器 - SSRS
- r - 引用 xgb.DMatrix 中的列进行模型预测
- php - 注册 Laravel 时没有正确添加新记录
- objective-c - 无法正确格式化时间
- javascript - Javascript,crypto.subtle:如何导入 RSA 私钥?
- java - 如何将参数“请求有效负载”添加到发布请求?