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-you
malloc
ed


某些库函数将返回也需要释放的指针,因为它们使用malloc为您创建指针
strdup
就是这样一个例子。

You
free
what You
malloc
。我不会在释放当前节点时释放next和prev。它们应该在与释放当前节点的函数相同的函数中释放。如果当前节点被释放,它将不会使这些结构挂起,因为您应该在其他地方对它们进行引用。@Haroogan是的,您应该释放malloc中的对象,但这些对象不嵌套在当前节点中,只有对它们的引用才是。提前释放将留下指向已释放内存的指针。