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 :

Comment trouver l'erreur ?


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Comment trouver l'erreur ?
    Bonjour,

    Je debute en programmation et j'ai besoin d'un petit coup de main pour trouver l'erreur dans mon programme.

    J'ai crée une structure noeud qui me servira à construire une structure hierarchique ( arbre):

    la structure est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    typedef struct tree_node {
    		//Valeur du coefficient d'ondelette au noeud
    		float energy;
    		//Etat L (Large/Haut/1) ou S (Small/Bas/0):
    		int hiddenState;
    		//Indice indiquant le scale (l'échelle) auquel appartient ce noeud: valeur de 1 à J (J étant la racine et 1 les feuilles)
    		int scale;
    		//Indice indiquant le numéro du noeud dans l'arbre
    		int indiceTreeCoef[MAX_SCALE_NUMBER];
    		//4 fils du noeud 
    		struct tree_node *children[4];
    	} tree_node;
    	typedef tree_node *Tree;

    Ensuite Je veux créer un noeud j'appelle donc la structure et j'alloue de l'espace mémoire pour un objet intitulé root ( racine de l'arbre):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Tree *root;
    *root = (tree_node*)malloc(sizeof(tree_node));
    quand j'execute j'obtient le message d'erreur suivant:


    Erreur de segmentation (core dumped)


    Pouvez vous m'aider pour trouver l'erreur ?

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 178
    Points : 451
    Points
    451
    Par défaut
    Salut,

    Essaye d'utiliser la balise code pour plus de lisibilité

    Si "root" est de type "Tree" il faut lui allouer de la mémoire en tant que tel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Tree *root;
    root = (Tree*)malloc(sizeof(Tree));

  3. #3
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    C'est un peu hors sujet, mais sais-tu que tu peux faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    typedef struct tree_node_m
    {
            
            float energy;//Valeur du coefficient d'ondelette au noeud
    
            int hiddenState;//Etat L (Large/Haut/1) ou S (Small/Bas/0):
    
            int scale;//Indice indiquant le scale (l'échelle) auquel appartient ce noeud: valeur de 1 à J (J étant la racine et 1 les feuilles)
    
            int indiceTreeCoef[MAX_SCALE_NUMBER];//Indice indiquant le numéro du noeud dans l'arbre
    
            struct tree_node_m *children[4];//4 fils du noeud
    } tree_node, *Tree;
    Généralement on va éviter de faire des typedef struct X{}X;En effet, X est quoi? La structure ou le type?
    On préfère souvent mettre typedef struct X_m {}X;

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 4
    Points : 3
    Points
    3
    Par défaut ça marche !!
    Je vous remercie ça marche maintenant et merci pour vos conseils

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 4
    Points : 3
    Points
    3
    Par défaut une autre erreur
    Merci encore une fois pour votre réponse.
    J'ai un autre problème en fait. J'essaye d'initialiser les paramètres de l'objet root comme suit:

    Mais j'obtiens une erreur de segmentation encore une fois.

    Savez-vous d'où viens l'erreur ?

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Sans le code que tu as maintenant, on ne sait pas.

    En revanche, on peut émettre des hypothèses. Si tu as écris comme tu l'as dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Tree *root;
    root = (Tree*)malloc(sizeof(Tree));
    alors l'écriture (*root)-> est un peu louche. Si c'est un pointeur sur structure, il n'y pas d'étoile à mettre. Je suis même étonné que ça compile.

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/02/2015, 18h53
  2. Erreur LNK1181 : comment trouver le fichier concerné ?
    Par michousorbiers dans le forum Code::Blocks
    Réponses: 4
    Dernier message: 14/03/2010, 19h48
  3. [AC-2007] Erreur 0 et Comment trouver l'origine d'une erreur ?
    Par tibofo dans le forum VBA Access
    Réponses: 2
    Dernier message: 04/01/2010, 21h04
  4. Comment trouver l'erreur dans un fichier XML
    Par kerido dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 29/10/2007, 15h52
  5. [CR] Comment trouver un champs dans un report ??
    Par Madduck dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 18/09/2003, 08h31

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