我在使用此功能時遇到困難。 該功能應該搜索鏈接列表中的學生,並刪除此節點或打印錯誤消息(如果找不到該學生)。以下代碼無法正常工作,它會刪除正在搜索的節點之後的下一個節點。搜索並從鏈接列表中刪除
void vymazstudenta(STUDENT **head,const char *priezvisko)
{
STUDENT *traverse = *head;
while(traverse!=NULL)
{
if(!strcmp(traverse->priezvisko,priezvisko))
{
STUDENT *hladany = traverse->next;
traverse->next = hladany->next;
free(hladany);
return;
}
traverse = traverse->next;
}
fprintf(stderr,"Student %s sa nenasiel.\n",priezvisko);
return;
}
原來這就是這個代碼在做什麼。你需要修復它。提示:保存先前掃描的節點。 –
你說你的問題,它刪除下一個節點。您正在保存對下一個節點的引用,然後釋放它:'STUDENT * hladany = traverse-> next; ... free(hladany);' – BurnsBA
爲什麼在沒有'malloc()'的時候,循環裏面有'free()'? –