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 :

Mauvaise initialisation ?


Sujet :

C

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut Mauvaise initialisation ?
    Bonjour,

    j'ai crée un arbre.
    J'intialise le type de mon arbre avec la valeur -1 et le pere à NULL mais lorsque j'affiche la valeur du type, ça me donne 0.

  2. #2
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Le switch ne décrit pas le cas type=-1, et c->type n'est pas initialisé explicitement.

    Tu devrais prendre l'habitude d'initialiser systématiquement toutes les variables allouées (statiquement ou dynamiquement). Par exemple avec un petit memset().

  3. #3
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Citation Envoyé par Premium
    J'ai mis le type -1 pour différencer la racine des autres.
    Donc il faut que je rajoute un case pour le -1 mais pourquoi il affiche 0 ?
    Parce que c'est le premier choix du switch ?
    Non, pas à cause du switch. Si le switch ne prévoit pas le cas du -1 et ne contient pas de default, son code n'est pas exécuté.
    Comme ta variable c->type n'est pas initialisée, l'affichage est le contenu de la mémoire à cette adresse, donc valeur imprévisible. Coup de chance, tu obtiens un 0.
    Soit tu rajoutes le cas du -1 (ou mieux default, ce qui prendra en compte toutes les valeurs non prévues) dans ton switch, soit tu initialises c->type à une valeur par défaut avant le switch.
    A toi de voir.

  4. #4
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par Premium
    J'ai mis le type -1 pour différencer la racine des autres.
    Donc il faut que je rajoute un case pour le -1 mais pourquoi il affiche 0 ?
    Parce que c'est le premier choix du switch ?
    Il ne me semble pas que le type de la cellule racine de l'arbre est initialisé. A aucun moment il ne reçoit la valeur -1 (ni 0 il me semble). Comme type == -1 n'est pas un choix possible de ta structure switch/case, je n'arrive pas à savoir comment le type de ta racine peut valoir 0 lors de l'affichage. As-tu essayé d'initialiser le champs type de ta structure à une valeur par défaut (c'est une bonne pratique) pour voir si ce dernier est modifié par le programme?

    Thierry

  5. #5
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Citation Envoyé par mujigka
    Il ne me semble pas que le type de la cellule racine de l'arbre est initialisé. A aucun moment il ne reçoit la valeur -1 (ni 0 il me semble). Comme type == -1 n'est pas un choix possible de ta structure switch/case, je n'arrive pas à savoir comment le type de ta racine peut valoir 0 lors de l'affichage. As-tu essayé d'initialiser le champs type de ta structure à une valeur par défaut (c'est une bonne pratique) pour voir si ce dernier est modifié par le programme?

    Thierry
    Dans le code donné plus haut, j'initialise bien la racine avec -1 et le pere à NULL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *arbre = creer_cellule(0,0,image->width,image->height,tolerance,altitude_max,image,NULL,-1);
    J'ai rajouté un default et j'obtiens bien -1 à l'affichage

  6. #6
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Citation Envoyé par Premium
    Dans le code donné plus haut, j'initialise bien la racine avec -1 et le pere à NULL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *arbre = creer_cellule(0,0,image->width,image->height,tolerance,altitude_max,image,NULL,-1);
    Non, tu initialisais les paramètres de la fonction, pas les champs de ta structure. Dans le cas où type valait -1, c->type n'était jamais initialisé.

    Le fait de mettre un default dans le switch permet de remédier à ce soucis.

  7. #7
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par Premium
    Dans le code donné plus haut, j'initialise bien la racine avec -1 et le pere à NULL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *arbre = creer_cellule(0,0,image->width,image->height,tolerance,altitude_max,image,NULL,-1);
    J'ai rajouté un default et j'obtiens bien -1 à l'affichage
    Ici, tu passes la valeur -1 au paramètre type de la fonction creer_cellule(). Cela n'a rien à voir avec l'initialisation de c->type à -1.

    Thierry

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 24/05/2007, 16h05
  2. [servlet] initialisation d'objets
    Par tiPouick dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 05/08/2003, 12h12
  3. Initialisation de XMLModule
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 10
    Dernier message: 01/04/2003, 10h08
  4. initialisation Directinput avec delphi
    Par Madmaxx dans le forum DirectX
    Réponses: 1
    Dernier message: 21/02/2003, 17h37
  5. Réponses: 3
    Dernier message: 04/09/2002, 09h42

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