如果我有这样的东西:
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:
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字节。不知道这到底意味着什么,或者它是否相关。
发布于 2016-07-09 21:07:12
调用free并不释放指针,它释放指针指向的任何内容。简单地声明和使用指针并不需要释放,因此您不需要释放用于遍历列表的指针。
一般规则是,对于malloc/calloc/realloc.返回的所有内容,都需要调用free。在每个分配的块上只需要有一个free调用。释放同一块两次会导致未定义的行为。
发布于 2016-07-09 21:49:01
要添加@dasblinkenlight的内容,不需要显式地删除/删除它。因为*temp在函数的作用域中,所以一旦函数返回,它就会消失。
因为您关心的是未使用的内存,所以只需要提醒--指针在32位机器上需要4个字节,在64位机器上需要8个字节,而不是您可能认为的大小(DLL_Node)。
https://stackoverflow.com/questions/38286342
复制相似问题