我尝试在C中学习单个链表。 我编写了这段代码,假设将数字放入一个链表中,直到用户想要通过按x停止。
第二次输入的某些原因我收到了重大错误。
为什么会发生?谢谢。
typedef struct node {
int data;
struct node *next;
}node_t;
node_t * getnode(){
return (node_t*) malloc(sizeof(node_t));
}
main(){
char c;
char drek;// use to ignore char 10
node_t *s= getnode();
s->next=NULL;
node_t *t=s;
while(1){
printf("enter data\n");
scanf("%d", &s->data);
printf("x for exit\n");
c=getchar();
drek=getchar();//ignore char 10
if (c=='x'){
s->next=NULL;
break;
}
s=s->next;
}
}
答案 0 :(得分:1)
在使用它之前,你没有接下来是malloc()s->
s=s->next;
但是s-> next是NULL,所以在下一个循环& s->数据会发誓你。
答案 1 :(得分:1)
在第一次迭代之前,s->next
为NULL:
s->next=NULL;
然后:
while(1){
// ...
scanf("%d", &s->data);
// ...
s=s->next;
}
您将第一个输入读入s->data
,然后将s
重新分配给NULL(因为s->next
仍为NULL)。第二次迭代尝试在空指针到达s->data
时取消引用。