在此函数中,我试图使用free()删除记录并释放内存,但是以某种方式free(firstname [i])或free(score [i])都不起作用。请帮忙!
void deRecords(char **firstname, char **lastname, float *score, int num)//function to delete records
{
char *find;
find=(char*)malloc(10*sizeof(char));//allocating array to delete a record
printf("*Delete Records*\n");
printf("Enter last name: ");
scanf("%s",find);
for(int i=0; i<num; i++)
{
if(strcmp(lastname[i],find)==0)//if match is found, replace array with null
{
firstname[i]=NULL;
lastname[i]=NULL;
score[i]=0;
}
}
}
答案 0 :(得分:0)
在将名称字符串设置为NULL
之前,应先释放它们。
此外,在调用strcmp()
之前,请确保该条目不是NULL
,如果该条目先前已被删除,则会发生这种情况。
void deRecords(char **firstname, char **lastname, float *score, int num)//function to delete records
{
char find[100];
printf("*Delete Records*\n");
printf("Enter last name: ");
scanf("%s",find);
for(int i=0; i<num; i++)
{
if(lastname[i] && strcmp(lastname[i],find)==0)//if match is found, replace array with null
{
free(firstname[i]);
firstname[i]=NULL;
free(lastname[i]);
lastname[i]=NULL;
score[i]=0;
}
}
}