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就在你删除的部分。哈哈,永远不要这么说。您的计算机现在将自动爆炸。