在 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 必须是一个可以释放你的数据结构的函数。
我有一个用户链接列表,因此我完成了这个从链接列表中删除用户的功能:
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 必须是一个可以释放你的数据结构的函数。