C 为什么这段代码会产生分段错误?

C 为什么这段代码会产生分段错误?,c,linked-list,C,Linked List,我试图将节点插入到一个单链表中,编译器在代码的遍历部分产生了分段错误 struct Node *start=NULL; void traverse() { struct Node *t; t=start; if(t==NULL) { printf("Linked list is empty\n"); return; } printf("there are %d elements in linked list",c

我试图将节点插入到一个单链表中,编译器在代码的遍历部分产生了分段错误

struct Node *start=NULL;

void traverse() 
{
    struct Node *t;
    t=start;
    if(t==NULL)
    {
        printf("Linked list is empty\n");
        return;
    }
    printf("there are %d elements in linked list",count);

    while (t != NULL) 
    { 
        printf(" %d ",t->data); 
        t=t->next; 
    } 
    printf(" %d ",t->data);
}
运行代码后:

Shaons-Air:VSC shaon$ cd "/Users/shaon/Desktop/VSC/" && gcc linkedlist.c -o linkedlist && "/Users/shaon/Desktop/VSC/"linkedlist
1.insert at the beginning2.insert at the end3.traverse
1
enter element
2
1.insert at the beginning2.insert at the end3.traverse
1
enter element
3
1.insert at the beginning2.insert at the end3.traverse
3
Segmentation fault: 11
请看以下代码:

while (t != NULL)   // Keep repeating until t is NULL
{ 
    printf(" %d ", t->data); 
    t=t->next; 
} 
printf(" %d ",t->data);  // Now t is NULL but still you dereference it ...
              ^^^
              dereference a NULL
所以你继续,直到
t
NULL
,然后你做
t->data
!!那是撞车


只需删除最后一个
printf
,因为您已经打印了所有元素。

所以当t指向最后一个节点时

t->next=null 你呢

t = t->next;
//所以t=null

那么当你这么做的时候

printf(“%d”,t->data)


它创建seg fault,因为t为null并且没有任何数据部分

start
中有什么?通过在实际调试器中运行调试构建来启动,以便在崩溃发生时捕获崩溃。这将允许您在代码中找到它发生的位置,并检查变量的值以查看它们的值是否正确有效。如果你想从我们这里得到更多的帮助,你必须提供一个复制崩溃的系统。同时刷新,以及。您发布的代码不会导致seg故障。不需要整个代码,但需要a。不需要查看整个代码-是的。代码中某个地方的bug可能会导致代码中不相关的部分出现问题。因此,如果你把代码精简到一个最小的例子,问题就消失了,那么bug就在你删除的部分。哈哈,永远不要这么说。您的计算机现在将自动爆炸。