IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

erreur de segmentation


Sujet :

C

  1. #1
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut erreur de segmentation
    Bonjour à tous ,
    J'ai un souci d'erreur de segmentation avec ma fonction qui affiche les mots stockés dans un tableau rempli à partir d'un fichier binaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void DoubleParcoursTablefren(FILE *pfOut, MotCompact const pcMots1[],MotCompact const pcMots2[])
    {
    size_t iMot1,iMot2;
    	for(iMot1=0 ; iMot1<100 ; iMot1++)
    	{
     
    	printf("%s  \n",GetMotCompact(pcMots1+iMot1));
    	}
     
     
     
    	putchar('\n');
    }
    L'erreur se trouve exactement ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    __extern_always_inline int
    printf (__const char *__restrict __fmt, ...)
    {
      return __printf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __va_arg_pack ());
    }
    dans un fichier stdio2.h
    des reponses?
    merci
    Le jour est le père du labeur et la nuit est la mère des pensées.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour cyrine,

    Pourrions nous avoir le code de GetMotCompact, ainsi que la structure MotCompact.

    J'aurais dit que la problème se trouver dans GetMotCompact, enfin, plutot dans la valeur qu'il retourne.

    De plus, qu'elle est l'intérêt de faire un accès à un tableau de la sorte:
    Ceci ne serai pas un petit peu mieux ( je pense pas qu'il y ai de différence )
    Pour l'histoire de l'emplacement d'une erreur, je suis désolé, mais l'erreur ne viendra pas du fichier stdio2.h ( à part si c'est vous la créatrice de celui ci ), mais, il faudrait plutot dire, l'erreur apparait ici.
    Car la cause de l'erreur est toujours dans notre code ( du moins, je ne remettrai jamais en cause les bibliothèques standards ).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Merci LittleWhite, tu as raison oui
    EN fait le tableau c'est moi qui la crée et rempli, donc je pense qu'il ya une erreur à ce niveau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
     struct char_fbtAllocator *pAllocCaracs1=NULL, *pAllocCaracs2=NULL;
    	struct int_fbtAllocator *pAllocLignes1=NULL, *pAllocLignes2=NULL;
    	size_t *pTailles1=NULL, *pTailles2=NULL, nbMots1=0, nbMots2=0;
    	int retour = EXIT_FAILURE;
    //	putchar('\n');
    	/*Initialisation des allocateurs */
    	{
    		size_t nbCaracs1=0, nbLignes1=0, nbCaracs2=0, nbLignes2=0;
    		if(CompterToutesTablesFichBinaire1fr(&pTailles1, &nbCaracs1, &nbLignes1)<0)
    			goto LNettoyage;
    		if(CompterToutesTablesFichBinaire2fr(&pTailles2, &nbCaracs2, &nbLignes2)<0)
    			goto LNettoyage;
    		nbMots1 = SommeTailles1fr(pTailles1);
    		nbMots2 = SommeTailles2fr(pTailles2);
    		pAllocCaracs1 = char_CreateFbtAllocator(nbCaracs1);
    		pAllocCaracs2 = char_CreateFbtAllocator(nbCaracs2);
    		if(pAllocCaracs1==NULL || pAllocCaracs2==NULL)
    			goto LNettoyage;
    		pAllocLignes1 = int_CreateFbtAllocator(nbLignes1);
    		pAllocLignes2 = int_CreateFbtAllocator(nbLignes2);
    		if(pAllocLignes1==NULL || pAllocLignes2==NULL)
    			goto LNettoyage;
    	}
    	{
    //creer le table et le remplit
    	MotCompact * pMots1fr = LireToutesTablesFichBinaire1fr(pTailles1, pAllocCaracs1, pAllocLignes1);
    	MotCompact * pMots2fr = LireToutesTablesFichBinaire2fr(pTailles2, pAllocCaracs2, pAllocLignes2);
     
    		if(pMots1fr==NULL || pMots2fr==NULL)
    		{
    			DetruireTableauMotsCompacts(pMots1fr), pMots1fr=NULL;
    			DetruireTableauMotsCompacts(pMots2fr), pMots2fr=NULL;
    			goto LNettoyage;
    		}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    MotCompact * LireToutesTablesFichBinaire1fr(size_t const *pcTailles, struct char_fbtAllocator *pAllocCaracs, struct int_fbtAllocator *pAllocLignes)
    {
     
    	if(pcTailles==NULL || pAllocCaracs==NULL || pAllocLignes==NULL)
    		return NULL;
     
    	{
    		/*Allocation*/
    		size_t nbMots = SommeTailles1fr(pcTailles);
    		MotCompact *pMots = CreerTableauMotsCompacts(nbMots);
    		printf("Chargement des  sequences pour langue");
    		if(pMots != NULL)
    		{
    			size_t iMot = 0;
    			int iSeq=1;
     
    				if(LireTableFichBinaire1fr(pcTailles[iSeq], pAllocCaracs, pAllocLignes, pMots, &iMot, nbMots)<0)
    				{
    					free(pMots);
    					return NULL;
    				}
    			return pMots;
    		}
    		else
    			perror("LireToutesTablesFichBinaire/malloc");
    	}
    	return NULL;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    static int LireTableFichBinaire1fr(size_t verifTaille, struct char_fbtAllocator *pAllocCaracs, struct int_fbtAllocator *pAllocLignes, MotCompact *pMots, size_t *piMot, size_t nbMots)
    {
    	int retour = -1;
    	char nomFich[FILENAME_MAX];
    	FILE *pfIn;
    	if(snprintf(nomFich, ARRAYSIZE(nomFich), "table1MotFR.bin") >= ARRAYSIZE(nomFich))
    	{
    		errno = E2BIG;
    		return -1;
    	}
    	pfIn = fopen(nomFich, LECTURE_SEQUENTIELLE_BINAIRE);
    	if(pfIn != NULL)
    	{
    		retour = LireTableFichierOuvert(pfIn, verifTaille, pAllocCaracs, pAllocLignes, pMots, piMot, nbMots);
    		fclose(pfIn);
    	}
    	return retour;
    }
    Le jour est le père du labeur et la nuit est la mère des pensées.

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Citation Envoyé par LittleWhite

    De plus, qu'elle est l'intérêt de faire un accès à un tableau de la sorte:
    Ceci ne serai pas un petit peu mieux ( je pense pas qu'il y ai de différence )
    Non, les deux ne sont pas équivalents :

    pcMots1[iMot1] ~ *(pcMots1+iMot1)

    &pcMots1[iMot1] ~ pcMots1+iMot1
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    C'est quoi, ce 100 ? D'où sort-il?

    Donne aussi les structures comme demandé, je ne suis pas sûr de les avoir sous la main...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Merci Médinoc,
    voila la structure de MotCompact
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Tableau compact de mots */
    typedef struct st_motCompact MotCompact;
     
    /* Les pointeurs dans cette structure utilisent un allocateur rapide,
    donc pas de free(). */
    struct st_motCompact
    {
    	int nbTermes;
    	int nbLignes;
    	int *pLignes;
    	char const *sczMot;
    };
    tu pense que le souci viens du 100?
    Le jour est le père du labeur et la nuit est la mère des pensées.

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ben le problème du 100, c'est que je ne vois pas d'où il vient. Pour moi, un tableau n'a pas une taille fixe...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    dans l'ancien code on nutilise pas 100, mais tu as utilisé nbMots
    nbMots1 = SommeTailles(pTailles1, maxSequence1);
    Le jour est le père du labeur et la nuit est la mère des pensées.

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ce qui me parait normal...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Merci Médinoc, là c'est bon avec l'erreur de segmentation, mais le probleme c'est qu'on m'affiche seulement 3 mots , pas tous les mots du texte
    Le jour est le père du labeur et la nuit est la mère des pensées.

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je n'ai pas sous les yeux les fonctions qui vérifient combien de mots contient le fichier...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    c'est cette fonction là dont tu parles?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(CompterToutesTablesFichBinaire(&pTailles1, &nbCaracs1, &nbLignes1, langue1, maxSequence1)<0)
    			goto LNettoyage;
    Le jour est le père du labeur et la nuit est la mère des pensées.

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    C'est possible.
    Edit: Re-poste aussi le commentaire décrivant le format du fichier...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #14
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    oui,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    int CompterToutesTablesFichBinaire1fr(size_t **ppTailles, size_t *pNbCaracs, size_t *pNbLignes)
    {
    	printf("Comptage des sequences pour langue");
    	if(ppTailles==NULL)
    		return -1;
    	*ppTailles = NULL;
    	if(pNbCaracs==NULL || pNbLignes==NULL)
    		return -1;
    	*pNbCaracs = 0;
    	*pNbLignes = 0;
     
    	{
    		/*Allocation*/
    		size_t *pTailles = malloc((2) * sizeof *pTailles);
    		if(pTailles != NULL)
    		{
     
    			/*Comptage*/
    			pTailles[0] = 0;
    			pTailles[1] = 0;
     
     
    				if(CompterTableFichBinaire1fr(pTailles+1, pNbCaracs, pNbLignes)<0)
    				{
    					free(ppTailles);
    					return -1;
    				}
     
    			*ppTailles = pTailles;
    			return 0;
    		}
    	}
    	return -1;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    static int CompterTableFichBinaire1fr(size_t *pTaille, size_t *pNbCaracs, size_t *pNbLignes)
    {
    	int retour = -1;
    	char nomFich[FILENAME_MAX];
    	FILE *pfIn;
    	if(snprintf(nomFich, ARRAYSIZE(nomFich), "table1MotFR.bin") >= ARRAYSIZE(nomFich))
    	{
    		errno = E2BIG;
    		return -1;
    	}
    	pfIn = fopen(nomFich, LECTURE_SEQUENTIELLE_BINAIRE);
    	if(pfIn != NULL)
    	{
    		retour = CompterTableFichierOuvert(pfIn, pTaille, pNbCaracs, pNbLignes);
    		fclose(pfIn);
    	}
    	return retour;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    static int CompterTableFichierOuvert(FILE *pfIn, size_t *pTaille, size_t *pNbCaracs, size_t *pNbLignes)
    {
    	unsigned int magic;
    	unsigned int taille;
    	unsigned int iMot;
    	assert(pTaille!=NULL);
    	assert(pNbCaracs!=NULL);
    	assert(pNbLignes!=NULL);
     
    	if(LireInt32(pfIn, &magic)<0 || magic!='hash')
    		return -1;
    	/*AfficherInt32(magic, WHITE);*/
    	if(LireInt32(pfIn, &taille)<0)
    		return -1;
    	(*pTaille) += taille;
    	/*AfficherInt32(taille, RED);*/
    	printf("\tComptage de %u sequences...\n", taille);
    	for(iMot=0 ; iMot<taille ; iMot++)
    	{
    		if(CompterMot(pfIn, pNbCaracs, pNbLignes)<0)
    			return -1;
    	}
    	return 0;
    }
    Le jour est le père du labeur et la nuit est la mère des pensées.

  15. #15
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Edit:[/B] Re-poste aussi le commentaire décrivant le format du fichier...
    le format du fichier binaire?, mais où est ce que je le trouve ce commentaire?
    Le jour est le père du labeur et la nuit est la mère des pensées.

  16. #16
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut format du fichier binaire
    /*NOTE: le format reste 100% compatible avec celui d'une table simple,
    le fait que le hachage soit double est entièrement transparent.*/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    static int EnregistrerDoubleTableFicherOuvert(FILE *pfOut, TableHachageMot const DblTableHash[])
    {
    	unsigned int magic = 'hash';
    	unsigned int taille = taille_double_table(DblTableHash);
    	assert(pfOut!=NULL);
     
    	if(EnregistrerInt32(pfOut, magic)<0)
    		return -1;
    	if(EnregistrerInt32(pfOut, taille)<0)
    		return -1;
     
    	printf("Enregistrement de %u sequences...\n", taille);
    	{
    		size_t nbEnreg = 0;
    		size_t iDblHash;
    		for(iDblHash=0 ; iDblHash<TAILLEHASH ; iDblHash++)
    		{
    			size_t iHash;
    			for(iHash=0 ; iHash<TAILLEHASH ; iHash++)
    			{
    				ChainonMot const *pc;
    				for(pc=GetPremierC(&DblTableHash[iDblHash][iHash]) ; pc!=NULL ; pc=GetNextC(pc))
    				{
    					if(EnregistrerMot(pfOut, pc)<0)
    						return -1;
    					nbEnreg++;
    				}
    			}
    		}
    		assert(nbEnreg == taille);
    	}
     
    	return 0;
    }
    Le jour est le père du labeur et la nuit est la mère des pensées.

  17. #17
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Si je me souviens bien, dans fichierBinaire.c.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  18. #18
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Si je me souviens bien, dans fichierBinaire.c.
    Ah oui voilà
    Structure du fichier:
    MAGIC: 'hash'
    INT32: Nombre de séquences
    BOUCLE:
    OCTET?: Caractère '['
    INT32: Taille du de la séquence, caractère nul compris
    OCTET?: Caractère '('
    BOUCLE:
    OCTET: Caractère de la séquence
    OCTET?: Caractère ')'
    INT32: Nombre de lignes de la séquence
    BOUCLE:
    INT32: N° d'une ligne sur laquelle apparait la séquence (triées par
    ordre décroissant)
    OCTET?: Caractère ']'
    Le jour est le père du labeur et la nuit est la mère des pensées.

  19. #19
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Ah oui , désolée pour le dérangement Médinoc, j'ai oublié que j'ai fait de l'élagage, donc c'est normal de ne pas trouver tous les mots.
    Merci infiniment
    Le jour est le père du labeur et la nuit est la mère des pensées.

  20. #20
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    int ChargerTableFichier()
    {
        struct char_fbtAllocator *pAllocCaracs1=NULL, *pAllocCaracs2=NULL, *pAllocCaracs3=NULL, *pAllocCaracs4=NULL;
    	struct int_fbtAllocator *pAllocLignes1=NULL, *pAllocLignes2=NULL, *pAllocLignes3=NULL, *pAllocLignes4=NULL;
    	size_t *pTailles1=NULL, *pTailles2=NULL,*pTailles3=NULL,*pTailles4=NULL, nbMots1=0, nbMots2=0,nbMots3=0,nbMots4=0;
    	int retour = EXIT_FAILURE;
    	/*Initialisation des allocateurs */
    	{
    		size_t nbCaracs1=0,nbCaracs2=0, nbCaracs3=0, nbCaracs4=0;
    		int nbLignes1=0, nbLignes2=0,nbLignes3=0, nbLignes4=0;
    		if(CompterToutesTablesFichBinaire1fr(&pTailles1, &nbCaracs1, &nbLignes1)<0)
    			goto LNettoyage;
    		if(CompterToutesTablesFichBinaire2fr(&pTailles2, &nbCaracs2, &nbLignes2)<0)
    			goto LNettoyage;
    			if(CompterToutesTablesFichBinaire1en(&pTailles3, &nbCaracs3, &nbLignes3)<0)
    			goto LNettoyage;
    		if(CompterToutesTablesFichBinaire2en(&pTailles4, &nbCaracs4, &nbLignes4)<0)
    		goto LNettoyage;
    		nbMots1 = SommeTailles1fr(pTailles1);
    		nbMots2 = SommeTailles2fr(pTailles2);
    		nbMots3 = SommeTailles1en(pTailles3);
    		nbMots4 = SommeTailles2en(pTailles4);
    		pAllocCaracs1 = char_CreateFbtAllocator(nbCaracs1);
    		pAllocCaracs2 = char_CreateFbtAllocator(nbCaracs2);
    		pAllocCaracs3 = char_CreateFbtAllocator(nbCaracs3);
    		pAllocCaracs4= char_CreateFbtAllocator(nbCaracs4);
    		if(pAllocCaracs1==NULL || pAllocCaracs2==NULL|| pAllocCaracs3==NULL|| pAllocCaracs4==NULL)
    			goto LNettoyage;
    		pAllocLignes1 = int_CreateFbtAllocator(nbLignes1);
    		pAllocLignes2 = int_CreateFbtAllocator(nbLignes2);
    		pAllocLignes3 = int_CreateFbtAllocator(nbLignes3);
    		pAllocLignes4 = int_CreateFbtAllocator(nbLignes4);
    		if(pAllocLignes1==NULL || pAllocLignes2==NULL|| pAllocLignes3==NULL|| pAllocLignes4==NULL)
    			goto LNettoyage;
    	}
    	{
    
    	MotCompact * pMots1fr = LireToutesTablesFichBinaire1fr(pTailles1, pAllocCaracs1, pAllocLignes1);
    	MotCompact * pMots2fr = LireToutesTablesFichBinaire2fr(pTailles2, pAllocCaracs2, pAllocLignes2);
        MotCompact * pMots1en = LireToutesTablesFichBinaire1en(pTailles3, pAllocCaracs3, pAllocLignes3);
    	MotCompact * pMots2en = LireToutesTablesFichBinaire2en(pTailles4, pAllocCaracs4, pAllocLignes4);
    		if(pMots1fr==NULL || pMots2fr==NULL||pMots1en==NULL || pMots2en==NULL)
    
    		{
    			DetruireTableauMotsCompacts(pMots1fr), pMots1fr=NULL;
    		DetruireTableauMotsCompacts(pMots2fr), pMots2fr=NULL;
    			DetruireTableauMotsCompacts(pMots1en), pMots1en=NULL;
    			DetruireTableauMotsCompacts(pMots2en), pMots2en=NULL;
    			goto LNettoyage;
    		}
    {
       calculerlesRegles( pMots1en,pMots1fr,nbMots1);
    }
    		DetruireTableauMotsCompacts(pMots1fr), pMots1fr=NULL;
    	DetruireTableauMotsCompacts(pMots2fr), pMots2fr=NULL;
    			DetruireTableauMotsCompacts(pMots1en), pMots1en=NULL;
    		DetruireTableauMotsCompacts(pMots2en), pMots2en=NULL;
    		retour = EXIT_SUCCESS;
    	}
      LNettoyage:
    
    	free(pTailles1), pTailles1=NULL;
    	free(pTailles2), pTailles2=NULL;
    	free(pTailles3), pTailles3=NULL;
    	free(pTailles4), pTailles4=NULL;
    	char_DestroyFbtAllocator(pAllocCaracs1), pAllocCaracs1=NULL;
    	char_DestroyFbtAllocator(pAllocCaracs2), pAllocCaracs2=NULL;
    	char_DestroyFbtAllocator(pAllocCaracs3), pAllocCaracs3=NULL;
    	char_DestroyFbtAllocator(pAllocCaracs4), pAllocCaracs4=NULL;
    	int_DestroyFbtAllocator(pAllocLignes1), pAllocLignes1=NULL;
    	int_DestroyFbtAllocator(pAllocLignes2), pAllocLignes2=NULL;
    	int_DestroyFbtAllocator(pAllocLignes3), pAllocLignes3=NULL;
    	int_DestroyFbtAllocator(pAllocLignes4), pAllocLignes4=NULL;
    	return retour;
    }
    Là le probleme c'est que la condition (en gras) est vérifiée et donc il zappe tout le bloc en rouge
    Je vois pas la cause du probleme
    Le jour est le père du labeur et la nuit est la mère des pensées.

Discussions similaires

  1. Erreurs de segmentation !
    Par anti-conformiste dans le forum Applications et environnements graphiques
    Réponses: 16
    Dernier message: 18/10/2005, 11h11
  2. Erreur de segmentation
    Par Trunks dans le forum C
    Réponses: 3
    Dernier message: 06/10/2005, 18h28
  3. Erreur de segmentation (Inconnue)
    Par Dark-Meteor dans le forum C
    Réponses: 5
    Dernier message: 08/09/2005, 13h42
  4. [Dev-C++] Erreur de segmentation...
    Par sas dans le forum Dev-C++
    Réponses: 11
    Dernier message: 26/03/2005, 14h25
  5. erreur de segmentation
    Par transistor49 dans le forum C++
    Réponses: 10
    Dernier message: 15/03/2005, 11h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo