最近两个小时,我一直在努力摸索,试图确定导致删除列表中最后一个节点的“ Segmentation fault:11”。
这是我的删除代码:
void delete(char* str)
{
/* Case when list is empty */
if(head == NULL)
{
return;
}
struct node_t* tempNode = head;
/* Case when node to be deleted is head */
if (strcmp(head->str,str) == 0)
{
head = tempNode->next;
tempNode->next->prev = NULL;
free(tempNode);
counter--;
return;
}
/* Node to be deleted based on user input */
while(tempNode != NULL)
{
if(strcmp(tempNode->str,str) == 0)
{
/* Case where node to be deleted is last node */
if(tempNode->next == NULL)
{
tail = tempNode->prev;
tempNode->prev->next = NULL;
free(tempNode);
counter--;
return;
}
/* Case when node isn't head or tail */
else
{
tempNode->prev = tempNode->next;
tempNode->next->prev = tempNode->prev;
free(tempNode);
counter--;
return;
}
}
tempNode = tempNode->next;
}
}
[有人可以协助我确定自己忽略的内容吗?预先感谢您提供的任何输入。
[不确定这是否正是您所说的“删除最后一个节点”,但是如果列表中只有1个元素并且您尝试将其删除,则代码将崩溃。在if
循环之前:
struct node_t* tempNode = head;
if (strcmp(head->str,str) == 0)
{
head = tempNode->next;
tempNode->next->prev = NULL;
如果列表中只有一个元素(我们要删除的元素),那么tempNode->next
为NULL,尝试访问prev
将崩溃。