在 c 的函数中释放变量 malloc 和 return?

Free a variable malloc and return in a function in c?

我有一个用户链接列表,因此我完成了这个从链接列表中删除用户的功能:

puser* delete_user(puser* list_users, int fd_to_delete) {

puser *save_users;
save_users = (puser *)malloc(sizeof(puser));
save_users = list_users;
int nb_users = 0;

nb_users = count_user(list_users);

// only one user
if(nb_users == 1)
    free(list_users);
    return NULL;

// several users
if(nb_users > 0) {

    // if it's the first user of the list
    if(user_get_fd(list_users) == fd_to_delete)
        return user_get_next_one(list_users);

    // else 
    while(list_users != NULL) {

        if(user_get_next_one(list_users) != NULL) {

            if(user_get_fd(user_get_next_one(list_users)) == fd_to_delete)
                list_users->next_client = user_get_next_one(user_get_next_one(list_users));
        }
    list_users = user_get_next_one(list_users);
    }

    return save_users;
}
return save_users;}

我有 malloc "save_users",但我需要 return 这个值。我的问题是如何释放这个变量?

谢谢

您可以只调用 free(),但最好在您的 api 中提供另一个函数,称为 free_save_users() 并在此函数中调用 free(),在如果您需要更改内存的分配方式。

如果您想保持原样,您可以决定不 return 用户*。

相反,您可以传递一个 puser**,指向 puser*list_user 的位置。然后,您可以在这一行中取消引用此 puser**:

save_users = *list_users;

在你的函数结束时,你可以free(*list_user),set *list_user = save_users.

所以:

puser * list_user ...;
delete_user(&list_user, ...);

delete_user 现在所在的位置:

void delete_user(puser** list_user, ...){
    puser * saved_user = malloc(...);
    saved_user = *list_user;
     ... Do stuff to saved user ...
    free(*list_user);
    *list_user = saved_user;
}

现在,当您的函数退出时,list_user 现在指向您在函数中分配的 saved_user。您不再需要释放 saved_user。您可以释放旧的 list_user。

显然 free 必须是一个可以释放你的数据结构的函数。