gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 00:46:14 24 4
gpt4 key购买 nike

如果我有类似的东西:

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 。在每个分配的 block 上只需要调用一次 free。两次释放同一个 block 会导致未定义的行为

关于c - 我应该释放一个用于遍历链表的临时指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38286342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com