C/Pointer - 在不初始化的情况下声明局部变量指针

Ano*_*ous 2 c pointers initialization segmentation-fault

所以,我尝试过这样的事情:

void place(struct node * list, int elem){                                                                                                                                                         
    struct node *tmp = list;                                                                                                                                                                      
    struct node *prev ;                                                                                                                                                                                                                                                                                                                                             
    while(tmp && tmp->info <= elem){                                                                                                                                                              
        prev = tmp;                                                                                                                                                                               
        tmp = tmp->next;                                                                                                                                                                          
    }                                                                                                                                                                                             
    struct node *new = (struct node *)malloc(sizeof(struct node));                                                                                                                                
    new->info = elem;                                                                                                                                                                             
    new->next = prev->next;                                                                                                                                                                       
    prev->next = new;                                                                                                                                                                             
}
Run Code Online (Sandbox Code Playgroud)

它给了我一个分段错误.gdb没有帮助 - 显示了000000和??的回溯.

但是当我尝试这个时:

void place(struct node * list, int elem){                                                                                                                                                         
    struct node *tmp = list;                                                                                                                                                                      
    struct node *prev = tmp;                                                                                                                                                                                                                                                                                                                                             
    while(tmp && tmp->info <= elem){                                                                                                                                                              
        prev = tmp;                                                                                                                                                                               
        tmp = tmp->next;                                                                                                                                                                          
    }                                                                                                                                                                                             
    struct node *new = (struct node *)malloc(sizeof(struct node));                                                                                                                                
    new->info = elem;                                                                                                                                                                             
    new->next = prev->next;                                                                                                                                                                       
    prev->next = new;                                                                                                                                                                             
}
Run Code Online (Sandbox Code Playgroud)

它工作正常!两者之间的唯一区别是我在第二种情况下初始化局部变量指针prev,而在第一种情况下我没有这样做.但我不明白为什么第一种情况应该是分段错误?

有人可以解释一下吗?

谢谢!

Oli*_*rth 6

考虑如果while()条件在第一次遇到时为假,会发生什么. prev永远不会分配任何合理的东西.