我有一个关于如何正确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;
如果我有一个函数,调用make_list
调用malloc
只为llist类型分配空间,而不是其中的节点类型,我是否需要调用{{1}对于free
内的两个节点指针以及列表,或者因为我没有为它们调用struct l_node
,是不是malloc
?
答案 0 :(得分:1)
如果不使用malloc
获取指针,则不应free
,因为这会导致未定义的行为。
为了不造成内存泄漏,您应该free
malloc
编辑的内容。
某些库函数将返回需要释放的指针,因为它们使用malloc为您创建指针。 strdup
就是这样一个例子。