如何释放双指针?

时间:2020-04-14 20:27:20

标签: c

在此函数中,我试图使用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;
        }
    }
}

1 个答案:

答案 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;
        }
    }
}