我不知道我做错了什么。我有那个主要():
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);
}