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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 37
    Par défaut Erreur de segmentation
    Bonjour,
    j'ai une erreur de segmentation que je n'arrive pas à résoudre !!

    Voici les structures que j'utilise :
    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
     
    struct neighbor {
     	int id;
    	float ph;
    	struct neighbor * next;
    };
    typedef struct neighbor T_neighbor;
    //========================================================
    struct entree {
    	int destination_id;
    	T_neighbor  * neighbor;
    	struct entree * next;
    };
    typedef struct entree T_entree;
     
     
     
    //========data 
    struct data {
    	//
    	T_entree *		table;
     
    };typedef struct data T_data;
    l'erreur se produit dans ce code :

    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
     
    T_entree * find_destination(T_entree * c, int p_destination ) 
     
    {
          T_entree  *  courant;
          courant= NULL;
    	int trouve=0;
          if (c !=NULL  ) 
           { 
                  courant=c ;
                  while ((courant !=NULL) && (trouve==0) )
                  { 
      		if (courant->destination_id == p_destination)
      			trouve=1;
       		courant=courant->next;        
                  }
          }
          return courant;
    }
    plus précisément dans cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (courant->destination_id == p_destination)
    j'arrive pas à accéder à courant->destination_id ou courant->next , et aussi à c->destination_id et c-> next !!
    avez-vous une idée sur la cause de cette erreur ?
    Merci d'avance pour votre attention

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Avec tes tests de non-nullité avant, c et courant ne peuvent pas êtres NULL.

    c doit contenir quelque chose de non valide.

  3. #3
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 872
    Par défaut
    Comme l'a dit Winjerome, un element de ta liste ne doit pas etre valide. Verifie lorsque tu ajoutes un nouveau maillon que les pointeurs sur next sont bien initialises a NULL.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 37
    Par défaut
    Bonjour,
    J'ai essayé de simplifier le programme afin de comprendre l'erreur,
    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
     
    struct neighbor {
     	int id;
    	float ph;
    	struct neighbor * next;
    };
    typedef struct neighbor T_neighbor;
    //========================================================
    struct entree {
    	int destination_id;
    	T_neighbor  * neighbor;
    	struct entree * next;
    };
    typedef struct entree T_entree;
     
     
     
    //========data 
    struct data {
    	//
    	T_entree *		table;
     
    };typedef struct data T_data;
     
    int main()
    {
    	T_data * D;
    	D->table=NULL;
    	return 0;
    }
    c'est cette ligne qui causr l'erreur de segmentation.
    D->table contient une valeur non valide , donc je peux pas le manipuler.
    mais pour quoi ! je n'ai aucune idée !!!!

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 481
    Par défaut
    Citation Envoyé par MounaR Voir le message
    c'est cette ligne qui causr l'erreur de segmentation.
    D->table contient une valeur non valide , donc je peux pas le manipuler.
    mais pour quoi ! je n'ai aucune idée !!!!
    « table » est un pointeur appartenant à ta structure pointée par D. Seulement, D est lui-même un pointeur et lui, tu ne l'as pas initialisé.

    Tu essaies de remplir le champ « table » d'une structure qui n'existe pas encore !

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 37
    Par défaut
    j'initialise D :
    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
     
    struct neighbor {
     	int id;
    	float ph;
    	struct neighbor * next;
    };
    typedef struct neighbor T_neighbor;
    //========================================================
    struct entree {
    	int destination_id;
    	T_neighbor  * neighbor;
    	struct entree * next;
    };
    typedef struct entree T_entree;
     
     
     
    //========data 
    struct data {
    	//
    	T_entree *		table;
     
    };typedef struct data T_data;
     
    int main()
    {
    	T_data * D;
            D=NULL;
    	D->table=NULL;
    	return 0;
    }
    encore erreur de segmentation

  7. #7
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 481
    Par défaut
    Citation Envoyé par MounaR Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int main()
    {
    	T_data * D;
            D=NULL;
    	D->table=NULL;
    	return 0;
    }
    encore erreur de segmentation
    Essaie de réfléchir un peu avant de te jeter à corps perdu dans ton code : tu as initialisé D, ok, mais à quoi ? à NULL. NULL est censé pointer quoi ?

    Il faut que tu crées ta structure d'une manière ou d'une autre, soit en déclarant directement une variable locale de ce type, soit en allouant de la mémoire quelque part (par exemple avec malloc()) et en faisant en sorte que D pointe cet espace.

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