free() 函数总是崩溃

free() function always crash

提问人:nini 提问时间:12/22/2022 最后编辑:nini 更新时间:12/22/2022 访问量:20

问:

所以,我所有的工作都很好,但只有免费功能被禁用 我很确定问题出在我使用 malloc 的方式上

// This is the head 

typedef struct Contact {
    char*firstName;
    char* lastName;
    char* phoneNum;
    struct Contact* next
} Contact;

这就是我分配和创建新联系人的方式 只是我如何尝试使用 malloc 进行分配的示例


Contact* createNewCont(char* fName, char* lName, char* phoNum)
{
    Contact* newCont;
    newCont = malloc(sizeof (newCont));

    //allocate and check all the string in the contact
    newCont->firstName = malloc(strlen(fName));
    printf ("%d",strlen(fName));
    if(newCont->firstName == NULL)
        return NULL;
    strcpy(newCont->firstName,fName);

}

问题发生在这里 我尝试释放特定的联系人

int freeParam(Contact** head,char* fName, char* lName)
{
    Contact* temp = *head;
    int isExist = FALSE;
    int compVal1, compVal2;

    if (temp == NULL)
    {
        printf("null");
        return FALSE;
    }
    compVal1 = strcmp((*head)->firstName,fName);
    compVal2 = strcmp((*head)->lastName,lName);
    if (compVal1 == 0 && compVal2 == 0)
    {
        if (temp->next == NULL)
        {
            Contact* toRemvoe = *head;
            *head = NULL;
            return TRUE;
        }
        Contact* toRemvoe = *head;
        (*head) = (*head)->next;

        free(toRemvoe->firstName);
        free(toRemvoe->lastName);
        free(toRemvoe->phoneNum);
        free(toRemvoe);
        toRemvoe = NULL;
        return TRUE;
    }

我看到了一些答案,但不太明白

我尝试了几种不同的方法,使用 malloc 进行分配 但我得到了同样的结果

内存管理 链接列表 malloc free

评论

0赞 mzm 12/22/2022
如果不确定,请始终参考文档来了解函数的返回值和参数。因此,malloc 返回 void * 并具有要分配的内存量的参数(分配的内存量略高于需要并验证 src 的边界),在您的情况下,字符数 (strlen(fName)) * char 的大小(或 int ...),pubs.opengroup.org/onlinepubs/007904975/functions/malloc.html---cplusplus.com/reference/cstdlib/malloc -- 提供更多代码 什么是 **head
0赞 nini 12/22/2022
谢谢!我添加了缺失的部分(我希望)我可以,请看一看:)
0赞 trincot 12/22/2022
哪个调用会产生错误?free
0赞 nini 12/23/2022
嘿!感谢您的帮助,我发现了我用 mallox (sizeof (Contact *)) 而不是 mallox (sizeof (Contact)) 分配联系人的问题

答: 暂无答案