[英]Freeing data in a linked list
嘿,我目前正在处理需要删除列表中特定节点的任务。 我还需要释放这些节点的 memory。 这是给定的结构:
typedef struct s_list
{
struct s_list *next;
void *data;
} t_list;
我需要创建的 function 传递了一个 function,它释放了节点的数据。
void remove_node(t_list **begin_list, void (*free_fct)(void *))
//free_fct being the function to free data.
所以我的问题是:为什么我们不能像这样释放节点?:
s_list *node = *begin_list)
free(node)
为什么任务提供一个function专门免费数据? 我的猜测是,如果我只释放节点,数据仍将存储在 Memory 中,但这是否意味着 next 也需要被释放?
我也不知道 free_fct function 会是什么样子。 如果数据是字符串,free_fct function 会是什么样子?
关键是使列表更通用。 如果你只是释放你的remove_node function中的data
指针,你基本上只能在数据指针中存储由malloc、calloc和realloc分配的指向memory的指针此外,考虑节点的data
字段指向以下结构的实例:
struct some_struct{
FILE *file;
int *intArray;
}
该结构可能已使用malloc
动态分配,因此您可以使用free
释放它。 但是file
可能包含一个有效的文件句柄,而intArray
可能是一个指向动态分配的 int 数组的指针。 在这种情况下,通过释放data
,您将创建资源泄漏。 但是,如果您的列表实现允许您传递“析构函数”function,则可以传递 function,例如:
void SomeStructDestructor(void* data){
struct some_struct *temp = (struct some_struct*)data;
close(temp->file);
free(temp->intArray);
free(data);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.