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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    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 Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    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 Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    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 : 48
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    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
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    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 Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    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 : 48
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    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
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

+ 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