我应该释放用于遍历链表的临时指针吗?

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)

我对指针仍然不是很有经验,似乎我创建了一个额外的指针,但它只是指向列表中的一个位置,所以我不应该释放它,它会在函数结束时被清除?

顺便说一下,我定义DLLDLL_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字节.不确定这究竟意味着什么,或者它是否相关.

das*_*ght 5

调用free不释放指针,它释放指针所指向的内容.简单地声明和使用指针不会要求释放,因此您不需要释放用于遍历列表的指针.

一般规则是你需要调用//free返回给你的所有内容.每个分配的块只需要一次调用.释放相同的块两次会导致未定义的行为.malloccallocreallocfree