我有一个计算链表大小的函数。当 return 之前的行排除 temp=NULL
并且我只会 free(temp)
时,我遇到了“双重释放或损坏”编译错误。当我在 free(temp)
之前添加 temp=NULL
时,代码有效。
我是否因为编译器释放了 temp
和它链接到的节点而得到双重释放或损坏? temp=NULL
是否解决了这个问题?
最后,这么小的函数有必要使用free()
吗?
typedef struct node{
int a, b;
struct node *next;
}Node;
typedef struct list{
Node* head;
Node* tail;
}List;
int list_size(List *q){
Node *temp;
int i = 1;
if(q->tail == NULL && q->head == NULL){
return 0;
}
else{
temp = q->head;
while(temp->next != NULL){
temp = temp->next;
++i;
}
temp = NULL;
free(temp);
return i;
}
}
我是一名优秀的程序员,十分优秀!