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] plantage a cause du cosntructoeur et destructeur


Sujet :

C++

  1. #1
    Battosaiii
    Invité(e)
    Par défaut [debutant] plantage a cause du cosntructoeur et destructeur
    Dans plane.h ou ma classe plane est defini

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    lass plane: public FlyingMachine
    {
     
     
    private:
    	bool landingGearOn; // is the landing gear retracted or not ?
    	//this state is private because we dont use it elsewhere
    	int passenger; // number of passengers max on the plane
    	static int numberOfWing;
    	temps *t; // definition du pointeur t
    Dans plane.cpp ou le constructor plane est defini et le destructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    plane::plane()
    {
    landingGearOn=true;
    temps *t=new plane();
    }
     
    plane::~plane()
    {
    delete t;
     
    }
    Quand je compile il ne m'indique pas d'erreur mais un warning inutile :
    Warning W8004 plane.cpp 19: 't' is assigned a value that is never used in functi
    on plane::plane(string)
    Quand je fais un new de temps et un delete dans le main je n'ai pas de plantage. Quand j'execute le programme il plante vraisemblablement a cause de la definition de temps. Est ce que ca vient de la focntion (je pense pas ca marche dans main) ou bien de la maniere de le declarer dans la classe plane ???

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

    il y a effectivement une erreur : tu redéfinit le pointeur temps dans ton constructeur : le pointeur que tu initialise est donc local au construteur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    plane::plane()
    {
    landingGearOn=true;
    temps *t=new plane();
    }
    à remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    plane::plane()
    {
    landingGearOn=true;
    t=new plane();
    }
    je pense que ca va mieux fonctionner
    mabu

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 391
    Par défaut
    euh... t = new temps() plutôt, non? Parce que là, on a des appels récursifs infinis au constructeur de plane... --> stack overflow
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par Médinoc
    euh... t = new temps() plutôt, non? Parce que là, on a des appels récursifs infinis au constructeur de plane... --> stack overflow
    Mea culpa : j'ai eut le copier coller un peu rapide

  5. #5
    Battosaiii
    Invité(e)
    Par défaut
    eu oui t'as raison c'est t= new temps() mais le probleme c'est quand j'execute le main il m'envoit une fenetre main.exe has encoutered a problem.
    ca vient de ma classe t donc ?

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    Aurais tu des détails sur le message d'erreur ?

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 391
    Par défaut
    ça ressemble à l'équivalent Windows d'une segfault...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Battosaiii
    Invité(e)
    Par défaut
    le message d'erreur ne possede pas d'informations importantes je pense mais je peux vous donner quelques details :

    Error signature :

    AppName : main.exe AppVer 0.0.0.0 ModName : main.exe
    modVer : 0.0.0.0 Offset 0000649b

    Il y a meme un error report contents avec enormement d'informations avec ecrit :


    Exception information :

    ...

    System information :

    ...

    Module 1 :

    main.exe
    image base ;... image size ...
    cheksum ... time stamp : ...


    module 2 :

    ...



    ...



    stack :

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 391
    Par défaut
    Citation Envoyé par Médinoc
    ça ressemble à l'équivalent Windows d'une segfault...
    Bref, tu as du accéder à un pointeur non-initialisé, ou sortir d'un tableau, ou bien accéder à un pointeur NULL, etc.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ce serait plus facile si tu pouvais localiser la ligne qui plante à l'aide de ton debugger.

    On peut voir à quoi ressemblent le constructeur et le destructeur de ta classe temps ?

  11. #11
    Battosaiii
    Invité(e)
    Par défaut
    J'ai pas de destructeur pour la classe temp .

    voici mon constructeur :
    temps::temps()
    {
    nice=true;
    }

  12. #12
    Battosaiii
    Invité(e)
    Par défaut
    au niveau de la declaration de la classe temps c'est bon ? Il n'y a pas d'erreur ? Parceque j'ai essaye avec deux autres classes l'une derivee et l'autre plane . J'ai la meme erreur. C'est bizarre que je ne puisse pas declarer un pointeur t non >?

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/04/2008, 02h25
  2. Plantage a cause : panel non visible
    Par AT dans le forum Débuter
    Réponses: 13
    Dernier message: 05/01/2008, 08h31
  3. plantage a cause de CString::Format
    Par e-teo dans le forum MFC
    Réponses: 2
    Dernier message: 18/10/2005, 18h02
  4. [Oracle 9.1] Plantage SQL+ à cause d'une requête
    Par ftrifiro dans le forum Oracle
    Réponses: 8
    Dernier message: 04/10/2005, 15h08
  5. [debutant][servlet]erreur causée par une listBox
    Par omega dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 05/03/2004, 10h53

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