链表 - C - 分段错误

Smo*_*kie 2 c linked-list data-structures

我试图弄清楚为什么我的程序在调用ll_print时崩溃了.[[这是一个非常简单直接的问题,我不确定要添加什么来填补解释空白]]

    struct ll{
          struct ll* next;
          int n;
        } ll;

   void ll_print(struct ll *l){
      while (l) {
        printf("%d ", l->n);
        l=l->next;
      }
    }

    void ll_fill(struct ll *l, int n){
      struct ll *temp= NULL;
       while (n>0){
        l= (struct ll*)malloc(sizeof(struct ll));
        l->n=n;
        l->next= temp;
        temp=l;
        n--;
      }
     }

    int main(void){
      int i=0;
      struct ll *l;                                                                                                                                          
      ll_fill(l, 10);
      ll_print(l);  /** causing a segmntation fault **/                                                                                                                                                                 
    }
Run Code Online (Sandbox Code Playgroud)

小智 5

l是因为指针永远不会被初始化.看起来你希望ll_fill初始化它,但是你错了 - 它是通过值传递的(read-by copy),而你lll_fill函数中分配的任何东西都不会为l声明的内部赋值main.要实现你想要的,传递l指针(你将有指针指针).或者,将其作为返回值ll_fill并执行l = ll_fill(l, 10);.另外,给自己一个调试器 - 它会帮助你很多.