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