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 :

Liste chainée problème lors de l'ajout d'un élement


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Par défaut Liste chainée problème lors de l'ajout d'un élement
    Bonjour a tous et merci d'avance pour l'aide que vous pourrez me donner,
    Ma fonction insert un élement d'une structure fournisseur au bonne emplacement dans la chaine (je la classe d'abord par ville ensuite par les noms);
    Mon problème c'est quand je veux ajouter 1 élément qui porte le même nom que mon 1er élement de ma liste mon programme crach en me disant qu'il y a un problème à cette endroit mais je ne vois pas ou est le problème.
    Si vous pourriez m’éclaircir pcq je ne vois pas trop ou est l'erreur.
    Merci d'avance et au plaisir de vous lire.
    Voila ma fonction:
    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
    FOURNISSEUR *InsertElemFournisseur(FOURNISSEUR *Fournisseur,FOURNISSEUR *ElemIns) {
    	FOURNISSEUR *ElemCourrant,*ElemPrec;
     
    	ElemPrec = NULL;
    	ElemCourrant = Fournisseur;
    	if (ElemCourrant == NULL || strcmp(ElemCourrant->ville, ElemIns->ville) >=0 ) {
    		if (ElemCourrant != NULL && strcmp(ElemCourrant->ville, ElemIns->ville) == 0) {
    			while (ElemCourrant != NULL && strcmp(ElemCourrant->nomFournisseur, ElemIns->nomFournisseur) < 0 ) {
    				ElemPrec = ElemCourrant;
    				ElemCourrant = ElemCourrant->Next;
    			}
    			ElemPrec->Next = ElemIns;
    			ElemIns->Next = ElemCourrant;
    		}
    		else {
    			ElemIns->Next = ElemCourrant;
    			ElemCourrant = ElemIns;
    		}
     
    	}
    	else {
    		while (ElemCourrant->Next != NULL && strcmp(ElemCourrant->ville,ElemIns->ville) < 0) {
    			ElemPrec = ElemCourrant;
    			ElemCourrant = ElemCourrant->Next;
    		}
    		if (!(strcmp(ElemCourrant->ville, ElemIns->ville))) {
    			while (strcmp(ElemCourrant->nomFournisseur, ElemIns->nomFournisseur) < 0 && ElemCourrant->Next != NULL) {
    				ElemPrec = ElemCourrant;
    				ElemCourrant = ElemCourrant->Next;
    			}
    		}
    		ElemIns->Next = ElemCourrant;
    		ElemCourrant = ElemIns;
    	}
    	return ElemCourrant;
    }

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    As-tu une idée de la ligne qui segfault ? As-tu essayé d'insérer des fprintf(stderr, ...) régulièrement pour situer le crash ?

    Comment sont définis les types en présence ?

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Par défaut
    Pour situer le crash j'ai exécuté au pas à pas. il crashe à ce niveau ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (ElemCourrant != NULL && strcmp(ElemCourrant->ville, ElemIns->ville) == 0) {
    			while (ElemCourrant != NULL && strcmp(ElemCourrant->nomFournisseur, ElemIns->nomFournisseur) < 0 ) {
    				ElemPrec = ElemCourrant;
    				ElemCourrant = ElemCourrant->Next;
    			}
    			ElemPrec->Next = ElemIns;
    			ElemIns->Next = ElemCourrant;
    Voici le message d'erreur:
    Exception thrown: write access violation.
    ElemPrec was nullptr.
    voici la définition de la structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    struct FOURNISSEUR {
    	long idFournisseur;
    	char nomFournisseur[25]; //obligatoire
    	char rue[50];
    	int codePostal;
    	char ville[20];
    	char pays[30]; //pays 
    	char email[50]; // local@domain.tld --> domain alphanum mini local alpha tld 2 -> 5 alpha mini
    	char website[50];// sub.domain.tld --> sub sub alphanum mini domain alphanum mini tld --> 2->5 alpha mini
    	char telephone[12]; // +zz xx xx xx xx
     
    	struct FOURNISSEUR *Next;
    };

  4. #4
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    En effet ce n'est pas étonnant, si le corps de la boucle n'est pas exécuté au moins une fois alors la valeur initiale d'ElemPrec n'est pas modifiée.

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Par défaut
    En effet mais je ne vois pas pourquoi le code ne s'exécute pas

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Par défaut
    J'ai su réglé mon problème tout seul j'ai juste supprimer le boucle ou le code crashais et il fonctionne parfaitement et fais ce que je lui demande

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème lors de l'ajout de logiciels
    Par jamjam19 dans le forum RedHat / CentOS / Fedora
    Réponses: 5
    Dernier message: 21/02/2008, 08h37
  2. Problèmes lors de l'ajout de nouvelles polices windows
    Par spynux dans le forum Windows XP
    Réponses: 9
    Dernier message: 01/08/2007, 22h01
  3. Vider liste chainée, problème
    Par hunter99 dans le forum C
    Réponses: 39
    Dernier message: 28/03/2007, 21h08
  4. Problème lors de l'ajout d'un port
    Par zehle dans le forum VHDL
    Réponses: 1
    Dernier message: 24/05/2006, 21h44
  5. [Client mail] Problème lors de l'ajout des comptes
    Par Leobaillard dans le forum Web & réseau
    Réponses: 9
    Dernier message: 19/11/2005, 17h12

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