我不确定运行它的问题是什么。我知道如果我删除第二个for循环(它应该释放内部数组),它运行正常。
int main(void)
{
int i;
char *board = malloc(sizeof(char *) * 8);
for (i=0; i<8; i++)
board[i] = malloc(sizeof(char *) * 8);
for (i=0; i<8; i++)
free(board[i]);
free(board);
return 0;
}
答案 0 :(得分:1)
变量board
是指向char
的指针,就像字符串一样。这意味着每个&#34;元素&#34; board
中的单个字符而不是指针。
这意味着你在循环中做
board[i] = malloc(sizeof(char *) * 8);
您将指定指向char
的指针,而不指定char *
。
您希望board
指向指针指向char
:
char **board = malloc(...)
哦,顺便说一下,你为循环中的每个字符串分配超过8个字符。您正在为8个指针分配内存。你应该这样做。
board[i] = malloc(sizeof(char) * 8);
或者,因为sizeof(char)
始终等于1
board[i] = malloc(8);
此外,我不知道这是否适用于您,但请记住C中的字符串末尾有一个特殊的终结符。因此,如果您想要一个包含八个字符的字符串,则需要为九个字符留出空间。
答案 1 :(得分:0)
你的变量board
是一个指向char的指针,但你的内部循环是为八个指向char的内存分配内存,而不是八个字符。
假设您的board
变量类型是您真正想要的,那么内部循环的代码需要如下所示:
for (i=0; i<8; i++)
board[i] = malloc(sizeof(char) * 8);