分配 i 删除带有指针的 2d 数组



我不知道我做错了什么。我有那个主要():

int main(int argc, char argv[])
{
    Player ** player = NULL;
    int sizePlayer = STARTPLAYER;
    CreateMemoryPlayer(&player,sizePlayer);    
    DeleteMemoryPlayer(&player, sizePlayer);
    return 0;
}

这是创建函数:

void CreateMemoryPlayer(Player *** player,int size)
{
    Player ** tmpPlayer = *player;
    tmpPlayer = (Player **)calloc(size, sizeof(Player*));
    for (int i = 0; i < size; i++)
        tmpPlayer[i] = (Player*)calloc(1, sizeof(Player));
}

删除:

void DeleteMemoryPlayer(Player *** player,int size)
{
    Player ** tmpPlayer = *player;
    for (int i = 0; i <size ; i++)
        free(tmpPlayer[i]);
    free(tmpPlayer);
}

我认为这很好,但是程序崩溃了。我真的不知道这段代码可能出了什么问题。请帮帮我。

如果我

没看错,在 CreateMemoryPlayer() 中分配的内存仅分配给局部变量tmpPlayer,但您永远不会更新参数变量player,这是将需要将对分配内存的引用传递回 main() 方法。

更好的模式是编写这两个方法,以便它们可以像这样使用:

Player ** player = CreateMemoryPlayer(sizePlayer);
DeleteMemoryPlayer(player, sizePlayer);

您应该返回 Player 数组,而不是通过指针传递它。

Player **creatplayer(size_t size)
{
    Player **ret;
    size_t i;
    if ((ret = calloc(1, sizeof (Player *))) == NULL)
        return NULL;
    for (i = 0; i < size; ++i)
        if ((ret[i] = calloc(1, sizeof (Player))) == NULL)
            return NULL;
    return ret;
}
void delplayer(Player **p, size_t size)
{
    size_t i;
    for (i = 0; i < size; ++i)
        free(p[i]);
    free(p);
}

最新更新