c - 在链表中,将最后一个节点与下一个元素进行比较会导致段错误吗?

标签 c linked-list segmentation-fault

我正在编写代码以从排序链表中删除重复元素,在该链表中我将每个元素与下一个元素进行比较。

代码如下:

void removeDuplicates(struct node* head)
{
    struct node* nextnext;
    struct node* current=head;

    if(current == NULL) 
        return;

    while(current != NULL) //Give Segmentation Fault
    {
        if(current->data == current->next->data)
        {
            nextnext = current->next->next;
            free(current->next);
            current->next=nextnext;
        }
        else
        {
            current = current->next;
        }

    }
}

如果我只是将 while 循环从 while(current != NULL) 更改为 while(current->next != NULL),段错误就会消失。

当我在每一行之后打印列表时,它会在发生段错误之前打印所有内容直到最后。这是否意味着将最后一个节点与下一个元素进行比较会导致段错误?

最佳答案

段错误很可能是由访问current->next成员引起的(例如current->next->datacurrent->next->next),因为您没有检查 current->next 是否为 null。如果是,则对其数据成员的访问是内存违规。

关于c - 在链表中,将最后一个节点与下一个元素进行比较会导致段错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28283261/

相关文章:

在实模式下结合 NASM、BCC 和 Ld86 : has bad magic number

c - 按位运算符 : Printing the numbers 1 to 100 using bit manipulation

python - Python 中的双向链表

c++ - 从链表中的第一个节点删除时出现段错误

c++ - 在 C++ 中返回二维 vector 时出现段错误

c - 加载共享对象的故障安全方式

c - bpkt ARM 指令卡住了我的嵌入式应用程序

c - 制作可与不同大小的结构一起使用的通用链表实现

c++ - 在 C++ 中玩转内存

c - 为什么这段代码会导致段错误?