如果我有类似的东西:
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;
我看到一个推荐程序 valgrind 用于测试内存泄漏,它说绝对丢失和间接丢失都是 0 字节,但可能丢失是 2,064 字节。不确定这到底意味着什么,或者它是否相关。
调用free
不会释放指针,它会释放指针指向的任何内容。简单地声明和使用指针不会调用释放,因此您不需要释放已用于遍历列表的指针。
一般规则是,您需要对 malloc
/calloc
/realloc 返回给您的所有内容调用 free
。在每个分配的 block 上只需要调用一次 free
。两次释放同一个 block 会导致未定义的行为。
我是一名优秀的程序员,十分优秀!