Aus*_*tin 1 c free pointers doubly-linked-list
如果我有类似的东西:
function(DLL *dll) {
DLL_Node *temp = dll->head
// do stuff with temp like traverse list with temp=temp->next
// say when done, temp = dll->tail, should I free(temp) or leave it alone?
}
Run Code Online (Sandbox Code Playgroud)
我对指针仍然不是很有经验,似乎我创建了一个额外的指针,但它只是指向列表中的一个位置,所以我不应该释放它,它会在函数结束时被清除?
顺便说一下,我定义DLL并DLL_Node喜欢这样:
typedef struct dll_node {
int data;
struct dll_node *prev;
struct dll_node *next;
} DLL_Node;
typedef struct DLL_ {
int count;
DLL_Node *head;
DLL_Node *tail;
} DLL;
Run Code Online (Sandbox Code Playgroud)
我看到了程序valgrind的建议,用于测试内存泄漏,它表示肯定丢失和间接丢失都是0字节,但可能丢失的是2,064字节.不确定这究竟意味着什么,或者它是否相关.
调用free不释放指针,它释放指针所指向的内容.简单地声明和使用指针不会要求释放,因此您不需要释放用于遍历列表的指针.
一般规则是你需要调用//free返回给你的所有内容.每个分配的块只需要一次调用.释放相同的块两次会导致未定义的行为.malloccallocreallocfree