Итак, я попытался сделать что-то вроде этого:
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 во втором случае, а я не делаю этого в первом случае. Но я не понимаю, почему первый случай должен быть ошибкой сегментации?
Может кто-нибудь объяснить это?
Спасибо!