我试图实现将节点插入到单链列表中。编译器在代码的遍历部分产生了分段错误。
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
答案 0 :(得分:1)
看下面的代码:
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
,因为您已经打印了所有元素。
答案 1 :(得分:1)
所以当t指向最后一个节点
t-> next = null 而你
t = t->next;
//所以t =空
那么当你这样做
printf(“%d”,t-> data);
由于t为空并且没有任何数据部分,因此会产生段错误