【发布时间】:2015-08-20 12:16:13
【问题描述】:
我正在尝试在 C 中打印 dynamic 2D array,问题是代码第一次打印得很好,但如果它再打印一次,它就会丢失底行。
这是我正在使用的代码:
void display_board( int height, int width, char** gameBoard ) {
int i;
char *rowString;
rowString = malloc(((width*2)+1) * sizeof( char ));
for( i = 0; i < ((height*2) + 1); i++ ){
rowString = *(gameBoard + i);
printf("%s\n",rowString);
}
free(rowString);
}
正在制作的游戏是点和框,因此宽度和高度是框的数量,数组实际上分配为height*2+1 和width*2+1,如果高度为2 和宽度为4,请注意该示例已经填充了所有边缘,但通常边缘只是空白:
x-x-x-x-x
| | | | |
x-x-x-x-x
| | | | |
x-x-x-x-x
当我第一次打印时它看起来像这样,但如果我再次尝试打印它看起来像这样:
x-x-x-x-x
| | | | |
x-x-x-x-x
| | | | |
知道为什么会这样吗?
【问题讨论】:
-
这里根本不需要
malloc和free,因为rowstring将指向已经存在的内存。malloc用于获取新内存。 -
我能问你为什么使用
*(gameBoard + i)而不是语义上等效的gameBoard[i]吗? -
为什么不直接打印
gameBoard? -
@Jess Ahrens 我想知道谁支持你的问题?!
-
这是 no 二维数组!它是指向
char的指针的一维数组(可能是一维数组)。