C:在Structs元素上使用Free()时出现问题,奇怪的Behivor

C:在Structs元素上使用Free()时出现问题,奇怪的Behivor,c,pointers,struct,free,dynamic-memory-allocation,C,Pointers,Struct,Free,Dynamic Memory Allocation,嘿,我在释放结构上的元素时遇到了问题 长代码警告 typedef结构宾果 { 炭板[5][5]; int*luckNum; int*boardNum; }宾果游戏; 无效更新(宾果*宾果,整数)//函数,该函数获取结构、编号并检查他是否在板中,如果在板中,则将其更改为“X” 内部主(空) { srand(时间(空)); 内部i,j,m,k,温度[75],*parr; 宾果玩家; //用于以后重新定位它们 如果(!(player.luckNum=(int*)malloc(sizeof(int)))

嘿,我在释放结构上的元素时遇到了问题

长代码警告

typedef结构宾果
{
炭板[5][5];
int*luckNum;
int*boardNum;
}宾果游戏;
无效更新(宾果*宾果,整数)//函数,该函数获取结构、编号并检查他是否在板中,如果在板中,则将其更改为“X”
内部主(空)
{
srand(时间(空));
内部i,j,m,k,温度[75],*parr;
宾果玩家;
//用于以后重新定位它们
如果(!(player.luckNum=(int*)malloc(sizeof(int)))
{
printf(“错误”);
}
如果(!(player.boardNum=(int*)malloc(sizeof(int)))
{
printf(“错误”);
}
//给出1-75的温度值
对于(i=0;i<75;i++)
{
温度[i]=i+1;
}
//在不重复相同数字两次的情况下,给玩家板随机值1-75
for(i=0;i<5;i++)//在行上传递
{
对于(j=0;j<5;j++)//传递到
{
//
做
{
k=rand()%75;//从0到74
}
while(temp[k]==NULL);//标记temp[k]时
player.board[i][j]=临时[k];
temp[k]=NULL;//NULL作为标记单元格为已取的“标志”(用于不两次取同一个数字)
player.luckNum=(int*)malloc(sizeof(int)*(i*j+j));
player.luckNum[i*j+j]=player.board[i][j];
}
}
//幸运儿
对于(i=0;i<25;i++)
{
printf(“%d”,player.luckNum[i]);
更新(&player,player.luckNum[i]);
}
printf(“\n”);
对于(i=0;i<25;i++)
{
printf(“%d”,player.luckNum);
}
免费(player.boardNum);
免费(player.luckNum);
getchar();
返回0;
}
无效更新(宾果*宾果,整数)
{
int i,j,k;
静态整数计数器=0,luckCounter=25;
对于(i=0;i<5;i++)
{
对于(j=0;j<5;j++)
{
如果(num==(int)(pBingo->board[i][j]))
{
pBingo->board[i][j]='X';
计数器++;
pBingo->boardNum=(int*)realloc(pBingo->boardNum,sizeof(int)*计数器);
pBingo->boardNum[计数器]=num;
对于(k=0;kluckNum[k]==num)
{
num=pBingo->luckNum[k];
pBingo->luckNum[k]=pBingo->luckNum[luckCounter-1];
pBingo->luckNum[luckCounter-1]=num;
pBingo->luckNum=(int*)realloc(pBingo->luckNum,sizeof(int)*luckCounter);
卢克计数器--;
}
}
}
}
}
}
有人能识别是什么中断了free()函数释放内存吗?。我是C新手,正在编写这段关于美好时光的代码,很抱歉我对free()函数一无所知,有人能帮我吗

宜兰

不要害怕发布你的代码,包括必要的内容。首先,您是否注意到编译器的警告

几个问题领域:

while(temp[k]==NULL)

您可以研究0、NULL和“\0”之间的差异,但保留对指针使用NULL。此外:

for ( i = 0; i < 25; i++)
   {
       printf("%d",player.luckNum);
   }
将丢失,因为您分配了luck.Num新地址,但没有释放第一个地址:

player.luckNum=(int*) malloc(sizeof(int)*(i*j+j));

一个问题是,在main的开头使用malloc
player.luckNum
进行分配,然后在嵌套循环中进行分配(顺便说一句,这似乎是完全错误的)。
if (!(player.luckNum = (int*) malloc(sizeof(int))))
player.luckNum=(int*) malloc(sizeof(int)*(i*j+j));