C 分配i删除带指针的二维数组

C 分配i删除带指针的二维数组,c,C,我不知道我做错了什么。我有那条主线 这是Create函数: 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*)ca

我不知道我做错了什么。我有那条主线

这是Create函数:

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 CreateMemoryPlayer(播放器***播放器,整数大小)
{
播放器**tmpPlayer=*播放器;
tmpPlayer=(玩家**)calloc(大小、大小(玩家*);
对于(int i=0;i
删除:

void DeleteMemoryPlayer(Player *** player,int size)
{
    Player ** tmpPlayer = *player;
    for (int i = 0; i <size ; i++)
        free(tmpPlayer[i]);
    free(tmpPlayer);
}
void deletemoryplayer(播放器***播放器,整数大小)
{
播放器**tmpPlayer=*播放器;

对于(int i=0;i如果我看得正确,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);
}
Player**creatplayer(大小)
{
玩家**ret;
尺寸i;
if((ret=calloc(1,sizeof(Player*))==NULL)
返回NULL;
对于(i=0;i
您应该使用
size\u t
来计算大小。不要在C中使用
malloc
calloc
realloc
的返回值。检查主菜单中
player
的值。它是否更改了?函数中的Create肯定是错误的,因为程序不会在该函数之后传递。1)身为三星级C程序员并不是一种恭维。这通常意味着你把界面搞砸了。2)你为什么认为函数可以返回值?3)你的代码中没有2D数组。指针不是数组!4)不要在C中使用
malloc
&朋友或
void*
的结果!5)学习并提供一个
应该是
char*argv[]
char**argv
,而不是
char argv[]
这可能值得一提的是,初始化
tmpPlayer=*player
会为函数开头指向的任何
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);
}