gpt4 book ai didi

C/Pointer - 声明一个局部变量指针而不初始化它

转载 作者:行者123 更新时间:2023-12-04 10:50:23 25 4
gpt4 key购买 nike

所以,我试着做这样的事情:

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;
}

它给了我一个段错误。 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;
}

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

有人可以解释一下吗?

谢谢!

最佳答案

考虑如果 while() 条件在第一次遇到时为假会发生什么。 prev 永远不会被分配任何有意义的东西。

关于C/Pointer - 声明一个局部变量指针而不初始化它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4776180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com