首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我是否应该释放一个用于遍历链接列表的临时指针?

问我是否应该释放一个用于遍历链接列表的临时指针?
EN

Stack Overflow用户
提问于 2016-07-09 21:04:18
回答 2查看 205关注 0票数 1

如果我有这样的东西:

代码语言:javascript
复制
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?
}

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

顺便说一下,我这样定义了DLL和DLL_Node:

代码语言:javascript
复制
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;

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-09 21:07:12

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

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

票数 5
EN

Stack Overflow用户

发布于 2016-07-09 21:49:01

要添加@dasblinkenlight的内容,不需要显式地删除/删除它。因为*temp在函数的作用域中,所以一旦函数返回,它就会消失。

因为您关心的是未使用的内存,所以只需要提醒--指针在32位机器上需要4个字节,在64位机器上需要8个字节,而不是您可能认为的大小(DLL_Node)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38286342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档