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

Should I free a temp pointer used to traverse a 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?
}

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

顺便说一句,我这样定义 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;

我看到一个推荐的用于测试内存泄漏的程序valgrind,它说绝对丢失和间接丢失都是0字节,但可能丢失是2,064字节。不确定这到底意味着什么,或者它是否相关。

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

一般规则是,您需要对 malloc/calloc/realloc 返回给您的所有内容调用 free。每个分配的块上只需要调用一次 free。释放同一个块两次导致 未定义的行为

只需添加@dasblinkenlight 所说的内容,您不需要明确地delete/remove它。由于 *temp 在函数的范围内,一旦函数 returns 它就会消失。

由于您担心未使用的内存,所以提醒一下 - 指针在 32 位机器上占用 4 个字节,在 64 位机器上占用 8 个字节,而不是您可能的 sizeof(DLL_Node)思维。