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 :

[debutant] Un probleme lors d'une execution


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Points : 4
    Points
    4
    Par défaut [debutant] Un probleme lors d'une execution
    Bonjour,
    J'ai crée une classe et volière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Voliere
    {
          private:
                  int nbOiseau;
                  int capacite;
                  Oiseau ** tab;
     
          public:
                 Voliere(int c=0);
                 void insere(Oiseau* adresse);
                 void afficher();
     
          };
    J'ai un probleme lors de l'éxécution de la méthode insere:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void Voliere :: insere(Oiseau* adresse)
    {
         if(nbOiseau==capacite)
         {cout<<"Il n'y a plus de place dans la volière"<<endl;
                               }
         else
         {tab[nbOiseau]=adresse;
         nbOiseau=nbOiseau+1;
         }
     
     }
    Dans ma fonction main, apres avoir crée un oiseau O, et une volière je fais :
    V.insere(&O);
    pour insérer cette oiseau à la volière. Ca compile bien mais au moment de l'éxecution ça se stoppe et j'ai une fenêtre qui apparait avec le message suivant : " Projet1.exe a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru."

    J'ai besoin d'aide. Merci d'avance



    balises [code] ajoutées par r0d. Merci d'y penser dorénavant.

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    C'est normal que cela ne marche pas.

    Ta classe Voliere contient un membre "Oiseau ** tab" qui est un tableau de pointeur sur Oiseau.

    Lors de l'insertion d'un oiseau, ce tableau n'est pas réalloué (ni même probablement alloué) quant tu fais "tab[nbOiseau]=adresse"

    Il manque donc une allocation. De plus, tu stockes des pointeurs sur Oiseau (cela est peut être voulu) mais cela peut se révéler dangeureux si tes oiseaux sont détruits sans que la volière ne soit au courant.

    Donc pour supprimer le mal de tête:
    * utilisation d'un vector (ou list) pour stocker tes oiseaux
    * instanciation des constructeur de copie, destructeur et opérateur d'affectaion de tes oiseaux pour avoir une copie "safe"

    Et enfin, ne pas oublier le tag [code] pour rendre le code plus lisible sur ce forum

  3. #3
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 264
    Points : 6 683
    Points
    6 683
    Billets dans le blog
    2
    Par défaut
    Bonjour et bienvenue sur developpez.com

    Quelques questions:
    -> Comment est créé ton oiseau O?
    -> Quel est ton environnement de developpement? Peux-tu débugguer et voir quelle ligne exactement pose problème?

    ps: pense aux balises

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

    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    La liste des oiseaux présents dans la voliere doit être stockée sous forme
    d'un tableau (alloué dynamiquement) de pointeurs contenant l'adresse des oiseaux
    de la liste. Je n'ai peut etre pas bien construit ce tableau. ()

    Mon oiseau est crée par le constructeur suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    Oiseau :: Oiseau(string id, double k, double vit)
    {
           identifiant=id;
           nbKm=k;
           vitesse=vit; 
                   }

  5. #5
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par ram_0000 Voir le message
    C'est normal que cela ne marche pas.

    Ta classe Voliere contient un membre "Oiseau ** tab" qui est un tableau de pointeur sur Oiseau.

    Lors de l'insertion d'un oiseau, ce tableau n'est pas réalloué (ni même probablement alloué) quant tu fais "tab[nbOiseau]=adresse"

    Il manque donc une allocation. De plus, tu stockes des pointeurs sur Oiseau (cela est peut être voulu) mais cela peut se révéler dangeureux si tes oiseaux sont détruits sans que la volière ne soit au courant.

    Donc pour supprimer le mal de tête:
    * utilisation d'un vector (ou list) pour stocker tes oiseaux
    * instanciation des constructeur de copie, destructeur et opérateur d'affectaion de tes oiseaux pour avoir une copie "safe"

    Et enfin, ne pas oublier le tag [code] pour rendre le code plus lisible sur ce forum
    +1
    sinon
    V.insere(&O);
    ca me semble trés louche.... si O est une variable temporaire, tu va avoir plein d'erreur mémoire car tu va pointer sur des zone mémoire que ne seront plus utilisé

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/12/2013, 11h33
  2. probleme lors de l execution d une applet
    Par fAdoua123 dans le forum Applets
    Réponses: 2
    Dernier message: 09/07/2007, 14h26
  3. Probleme lors d'une suppression
    Par DrTank dans le forum Langage SQL
    Réponses: 5
    Dernier message: 21/04/2005, 17h38
  4. [ADO] Probleme lors de l'execution d'une requete...
    Par NoisetteProd dans le forum Bases de données
    Réponses: 4
    Dernier message: 04/06/2004, 12h43
  5. Réponses: 13
    Dernier message: 10/05/2004, 16h49

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