为什么这个循环不会通过C中的链表重复多次?

时间:2016-07-02 10:03:01

标签: c

我尝试在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;
    }
}

2 个答案:

答案 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时取消引用。