我有一個函數可以計算鏈表的大小。在返回之前的行被排除temp=NULL
而我只有free(temp)
時,我得到了「double free or corruption」編譯錯誤。當我在free(temp)
之前添加temp=NULL
時,代碼起作用。計算列表大小,是否需要使用free()?
因爲編譯器釋放了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;
}
}
在'free(temp)'「工作之前添加'temp = NUL'L,因爲在這種情況下,你的免費歸結爲'free(NULL)',它什麼都不做。 –
順便說一句當你只是想要計算元素的數量時,爲什麼你釋放列表中的元素? –
@MichaelWalz - 我認爲有必要釋放溫度 - 但現在清楚了,'temp'沒有分配任何內存。 – JJL