【发布时间】:2016-10-24 15:54:17
【问题描述】:
从链表的头部删除时,我似乎遇到了段错误。返回的头部为 NULL。它也可能是在其他地方删除的东西,但是 printf 语句被打印了,所以我相信它与没有正确重置磁头有关。它进行一次传递并从头部删除并工作,但不是第二次。
node_t* delete_it(node_t** head, int id){
node_t* temp;
node_t* prev = (*head);
node_t* current = (*head);
int i = 0;
//checking to see if the head has the id
if((*head)->player.player_ID == id){
printf("removing from the head\n");
temp = (*head);
(*head) = (*head)->next;
free(temp);
return (*head);
}
//moving through finding the id
while(current->player.player_ID != id){
if(i > 0){
prev = prev->next;
}
//keeps prev pointer the one before current
i++;
current = current->next;
//checking for tail
if(current->next == NULL && current->player.player_ID == id){
temp = current;
free(temp);
return (*head);
}
//removing the node form somewhere inbetween head and tail
if(current->player.player_ID == id){
temp = current;
prev->next = current->next;
free(temp);
return (*head);
}
return(*head)
}
}
【问题讨论】:
-
我看不到函数在哪里结束。缺少一个结束“}”。添加它。
-
你已经将一个指针填充到指向头的指针,不需要也返回它。
-
@MichaelEhnes——我意识到我最初的答案是使用与您的代码略有不同的结构设计。我已经解决了这个问题,并添加了你的代码的修改版本。
标签: c linked-list segmentation-fault nodes