Segmentation fault

Résolu/Fermé
Kamoulox - 9 juin 2013 à 12:09
 kamoulox - 12 juin 2013 à 21:01
Bonjour,
voila je réalise un programme qui à besoin de file j'ai donc utiliser les définitions de se site car je ne suis pas très fort sauf que j'ai besoin de vider une file et peut importe ce que j'essaye il me met un segmentation fault voici le code
typedef struct ElementListe {
    long long donnee;
    struct ElementListe *suivant;
}Element;

typedef struct ListeRepere{
    Element *debut;
    Element *fin;
    int taille;
} File;


void initialisation (File * suite){
    suite->debut = NULL;
    suite->fin = NULL;
    suite->taille = 0;
}

int enfiler (File * suite, Element * courant, long long donnee){
    Element *nouveau_element;
    if ((nouveau_element = (Element *) malloc (sizeof (Element))) == NULL)
        return -1;
    // if ((nouveau_element->donnee =  malloc (sizeof (long long)))
    //  == NULL)
    //  return -1;
    nouveau_element->donnee=donnee;
    
    if(courant == NULL){
        if(suite->taille == 0)
            suite->fin = nouveau_element;
        nouveau_element->suivant = suite->debut;
        suite->debut = nouveau_element;
    }else {
        if(courant->suivant == NULL)
            suite->fin = nouveau_element;
        nouveau_element->suivant = courant->suivant;
        courant->suivant = nouveau_element;
    }
    suite->taille++;
    return 0;
}


int defiler (File * suite){
    Element *supp_element;
    long long r=-1;
    if (suite->taille == 0)
        return r;
    r = suite->debut->donnee;
    suite->debut = suite->debut->suivant;
    free (suite->debut);
    suite->taille--;
    return r;
}


File * factoriser(long long n,long long a,long long k) {
    long long D1,D2,q1,q2;
    File *facteur;// contiens la diviseur premier de n
    File *entier; //contiens tous les diviseurs non premier
    if ((facteur = (File *) malloc (sizeof (File))) == NULL){
        printf("erreur");
    }
    if ((entier = (File *) malloc (sizeof (File))) == NULL){
        printf("erreur");
    }
    initialisation(entier);
    initialisation(facteur);
    enfiler(entier,entier->fin,n);
   
    while (entier!=NULL){
        n=defiler(entier);
        D1=Pollard(n,a,k);
        D2=n/(D1);
        if (D1==1) {
            printf("veuillez choisir un autre k plus grand que %lld\n",k);
            k=choisirPuissance();
            a=choisirPetit(n);
            D1=Pollard(n,a,k);
            D2=n/(D1);
        }
        else if(D1==n){
            a=choisirPetit(n);
            D1=Pollard(n,a,k);
            D2=n/(D1);
        }
        
        else{
            //printf("erreur");
            if (estPremier(D1)==0) {
                enfiler(entier,entier->fin,D1);
                /*n=D1;
                k=choisirPuissance();
                a=choisirPetit(D1);
                D1=Pollard(n,a,k);
                D2=n/D1;*/
            }else{
                enfiler(facteur,facteur->fin,D1);
            }
            
            if (estPremier(D2)==0) {
                enfiler(entier,entier->fin,D2);
                /*n=D2;
                k=choisirPuissance();
                a=choisirPetit(D2);
                D2=Pollard(n,a,k);
                D1=n/D2;*/
            }else{
                enfiler(facteur,facteur->fin,D2);

            }
            
        }
        
    }
    
    
    return facteur ;
}

Toute les autres fonctions marchent j'ai essayer comme ça avec entier->taille, entier->debut et entier->fin mais tous font un segmentation faut

4 réponses

nar6du14 Messages postés 459 Date d'inscription dimanche 27 décembre 2009 Statut Membre Dernière intervention 7 décembre 2013 64
12 juin 2013 à 18:28
"File" fait partie du C, n'utilise pas "File" car c'est un type qui désigne un descripteur de fichier en c!!! utilise autre chose à la place
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
12 juin 2013 à 20:16
@nar6du14,
"File" fait partie du C, n'utilise pas "File" car c'est un type qui désigne un descripteur de fichier en c!!! utilise autre chose à la place
Tu confonds certainement avec FILE ;-).
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
12 juin 2013 à 20:20
Pourrait-on avoir le main() provoquant les erreurs pour qu'on puisse tester ton code ? Ca sera plus simple.
0
c'est bon j'ai trouver l'erreur se trouvait dans defiler j'ai mit le free après de mettre le suivant dans début
0