问题释放 2D 动态内存

Issue Freeing 2D Dynamic Memory

我不确定 运行 这是什么问题。我知道如果我删除第二个 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;
}

您的变量 board 是一个指向字符的指针,但是您的内部循环正在为八个指向字符的指针而不是八个字符分配内存。

假设您的 board 变量类型是您真正想要的,那么您的内循环代码需要如下所示:

for (i=0; i<8; i++)
        board[i] = malloc(sizeof(char) * 8);

变量 board 是指向 char 的指针,即很像字符串。这意味着 board 中的每个 "element" 都是 单个字符 而不是指针。

这意味着当你在循环中做

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 中的字符串末尾有一个特殊的终止符。因此,如果您想要一个八个字符的字符串,则需要为 九个 个字符创建 space。