C-包含结构类型的结构上的malloc/free
我有一个关于如何正确地C-包含结构类型的结构上的malloc/free,c,struct,linked-list,malloc,free,C,Struct,Linked List,Malloc,Free,我有一个关于如何正确地释放指向结构类型的指针的快速问题。以链表为例,假设有: struct l_node { int data; struct l_node *next; struct l_node *prev; }; typedef struct l_node node; struct l_list { node *head; node *tail; }; typedef struct l_list llist; 如果我有一个函数,调
释放指向结构类型的指针的快速问题。以链表为例,假设有:
struct l_node {
int data;
struct l_node *next;
struct l_node *prev;
};
typedef struct l_node node;
struct l_list {
node *head;
node *tail;
};
typedef struct l_list llist;
如果我有一个函数,调用它make_list
调用malloc
只为一个llist类型分配空间,而不是为其中的节点类型分配空间,我是否需要为struct l_node
中的两个节点指针以及列表调用free
,或者因为我没有为它们调用malloc
,不释放是否可以?如果不使用malloc
获取指针,则不应释放它,因为这将导致未定义的行为。
为了不造成内存泄漏,您应该free
what-youmalloc
ed
某些库函数将返回也需要释放的指针,因为它们使用malloc为您创建指针strdup
就是这样一个例子。Youfree
what Youmalloc
。我不会在释放当前节点时释放next和prev。它们应该在与释放当前节点的函数相同的函数中释放。如果当前节点被释放,它将不会使这些结构挂起,因为您应该在其他地方对它们进行引用。@Haroogan是的,您应该释放malloc中的对象,但这些对象不嵌套在当前节点中,只有对它们的引用才是。提前释放将留下指向已释放内存的指针。