问题释放2D动态内存

时间:2016-09-23 16:56:58

标签: c malloc free

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

2 个答案:

答案 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);