我想在一個函數中動態分配一個二維數組,並在另一個函數中打印它,但createMapBoard()函數的返回值需要是指向數組地址的指針。以下是我的代碼。它編譯並打印出來,但僅限於creatMapBoard()函數。它不會在數組中讀入printMapBoard(** char)函數,我不知道爲什麼。如何在一個函數中動態分配一個二維數組並在另一個函數中打印它?
#include <stdio.h>
char **createMapBoard(void);
void printMapBoard(char **board);
char **destroyMapBoard(char **board);
int main(){
char **board = createMapBoard();
printMapBoard(board);
destroyMapBoard(board);
printMapBoard(board);
return 0;
}
char **createMapBoard(void){
char **ptr[8][8];
int i,j;
char F = 'F';
char K = 'K';
char C = 'C';
char D = 'D';
char B = 'B';
int n = 8;
int m = 8;
for(j=0; j<8; j++){
for(i=0;i<8;i++){
ptr[j][i] = ' ';
}
}
ptr[0][0] = F;
ptr[0][1] = F;
ptr[1][1] = F;
ptr[2][1] = F;
ptr[2][2] = F;
ptr[3][2] = F;
ptr[4][2] = K;
ptr[5][0] = C;
ptr[5][3] = B;
ptr[6][1] = C;
ptr[6][2] = C;
ptr[6][4] = D;
ptr[7][2] = C;
ptr[7][5] = D;
ptr[7][6] = D;
printf("========\n");
for(j=0;j<8;j++){
for(i=0;i<8;i++){
printf("%c",ptr[j][i]);
}
printf("\n");
}
printf("========\n");
printf("\n");
return **ptr;
}
void printMapBoard(char **board){
int j, i;
printf("========\n");
for(j=0;j<8;j++){
for(i=0;i<8;i++){
printf("%c", board[j][i]);
}
printf("\n");
}
printf("========\n");
printf("\n");
}
char **destroyMapBoard(char **board){
free(**board);
free(board);
return 0;
}
在'createMapBoard'中,你不會動態創建任何東西,而你的變量'ptr'是一個由8個指向'char'指針的8個數組組成的數組,可能不是你想要的。 –
好的,我該如何在createMapBoard函數中動態地分配內存然後呢? – Scarlet
您是否嘗試過搜索它?在這個網站上有成千上萬的例子,可能是數百萬的因特網。嘗試輸入'c allocate 2d array dynamic例如'到你最喜歡的搜索引擎並檢查結果。 –