Segmentation fault

Résolu
Kamoulox -  
 kamoulox -
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   Statut Membre Dernière intervention   64
 
"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   Statut Contributeur Dernière intervention   1 846
 
@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   Statut Contributeur Dernière intervention   1 846
 
Pourrait-on avoir le main() provoquant les erreurs pour qu'on puisse tester ton code ? Ca sera plus simple.
0
kamoulox
 
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