【发布时间】:2017-10-21 06:57:07
【问题描述】:
void delete()
{
if(root == NULL)
{
printf("ERROR EMPTY LIST.\n");
}
else
{
printf("Enter value: ");
scanf("%d",&target);
if(root->data == target)
{
root = root->next;
}
else
{
struct node *ptr = root;
struct node *prev = NULL;
while(ptr != NULL)
{
if(ptr->data == target)
{
break;
}else
{
prev->next = ptr;
ptr = ptr->next;
}
}
prev->next = ptr->next;
}
}
}
程序在必须遍历链表时崩溃,我认为这与指针ptr和prev有关。我的逻辑是遍历列表,直到 ptr 运行到包含目标数据的节点。一旦它确实跳出循环并使 prev 指向节点 ptr->next 指向。
【问题讨论】:
-
调试器.......................
-
root = root->next;是内存泄漏,因为您刚刚丢失了对root指向的内存块的引用。 (您需要free节点数据(如果已分配),然后是节点(如果这确实是一个链表,则应该分配)。
标签: c data-structures linked-list