2016-08-25 7 views
2

Я пытаюсь сделать отсортированный дважды связанный список с функцией inserer(), чтобы вставить в него значения.Сортированный дважды связанный список и значения вставки

Я пишу всю программу следующим образом:

#include <stdio.h> 
#include <stdlib.h> 

typedef struct bi{ 
    int val; 
    struct bi *prec; 
    struct bi *suiv; 
}bil; 

void inserer (int v, bil *tete) 
{ 
    bil *cour, *elt; 

    cour = tete->suiv; 

    while (cour != tete && cour->val < v) 
     cour = cour->suiv; 
    elt = (bil*) malloc(sizeof(bil)); 
    if (elt) 
    { 
     elt->val = v; 

     (cour->prec)->suiv = elt; 
     elt->suiv = cour; 
     elt->prec = cour->prec; 
     cour->prec = elt; 
    } 
} 

int main() 
{ 
    bil* tete; 

    /*Creation tete fictif*/ 
    tete = (bil*) malloc (sizeof(bil)); 


    tete->prec = tete; 
    tete->prec = tete; 

    inserer (3,tete); 
    return 0; 
} 

Тогда я пытаюсь использовать функцию и вставить значение (3 в примере) с inserer (3,tete); Но продолжает давать ошибку сегментации. Помощь была бы оценена.

ответ

4

tete->suiv используется неинициализированным в

cour = tete->suiv; 

Изменение

tete->prec = tete; 
tete->prec = tete; 

в

tete->prec = tete; 
tete->suiv = tete; 
+1

Ты потрясающий, Как я этого не увидел. Спасибо – user3785612

+0

Добро пожаловать;) –

3

Вы получаете ошибку сегментации из cour = tete->suiv;

Первоначально оба указателя должны быть назначены tete

cour->suiv = tete; 
cour->suiv = tete; 
0

Вы никогда не заходило tete->suiv ни к чему. В main вы, вероятно, имели значение

tete->prec = tete; 
tete->suiv = tete; 
Смежные вопросы