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 :

push_back fait planter le programme


Sujet :

C++

  1. #41
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Pourquoi ne pas passer la map par (const)reference ?
    Contient-elle beaucoup de données ? Combien de mémoire disposes-tu sur la machine ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  2. #42
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 57
    Points : 20
    Points
    20
    Par défaut
    que veut tu dire par const reference ? oui j'ai assez de mémoire sur ma machine la map listMap est assez petite une dizaine d'éléments.

  3. #43
    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
    Référence constante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    int a;
    int &b = a; //b n'est pas une copie de a, b est un 'alias' de a (en fait c'est un pointeur qui se cache dedans)
     
    MyClass a;
    MyClass & b = a;
    b.toto();// b se comportera exactement comme a.
    //ne pas oublier que l'objet pointé par b doit être renseigné à sa déclaration et ne pourra pas être modifié par la suite.
     
     
    const int &b= a; //a ne pourra pas être modifié par l'intermédiaire de b.
    b = 4; //interdit
    a = 4; //autorisé
     
     
    const int & fonction()//fonction retournant une référence sur un int
    {
           int a = 4;
           return a; // /!\ a est une variable locale, dès que a sera détruite, si tu tente de faire :
    }
    b = fonction();
    cout << b; //tu va avoir une erreur de segmentation car a n'existe plus.

  4. #44
    screetch
    Invité(e)
    Par défaut
    ce n'est pas en optimisant le code que ca va corriger le crash, au pire une reference va devenir invalide et crasher de plus belle. Au moins la copie doit etre sure.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    navireimpacteur strikingShip = InputXmlManager::recuperation_donnees_strikingship(cp.retour_strikingFilePath(),listMat);
    navireimpacteur, il a un constructeur de copie?

  5. #45
    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
    Ce qui suit est un peu HS par rapport à ton problème mais je pense que ça devrait t'aider pour ton stage :

    Je suis en stage, une grande partie de code était existant je ne peut pas me permettre de refaire toute la structure du code c'est un très gros projet.
    Il faudrait que tu puisses dire à ton maitre de stage que de garder un tel code ne fera que faire perdre de l'argent (et du temps) à l'entreprise car :
    - très difficilement déboguable
    - très difficilement modulable (en cas de changement de l'affichage par exemple, il faut parfois réécrire entièrement le programme)
    - très difficilement modifiable
    - très difficilement lisible, nécessite donc un temps d'adaptation pour une personne qui commence à travailler dessus
    - sûrement très peu optimisé
    - et est susceptible de contenir plein d'erreurs pouvant éclater à n'importe quel moment.

    Il faudrait carrément refaire tout à partir de 0 en prenant bien le temps sur la conception en UML (et faire aussi un doc en doxygen serait pas mal non plus).

    ça risque de prendre pas mal de temps, mais à terme, ceci devrait être très rentable.

    Il ne faut surtout pas faire l'erreur de ne rien dire et au dernier jour dire qu'on a presque rien fait (car le code était illisible etc...) car cela sera beaucoup plus dur pour toi de t'expliquer et tu risque d'avoir une mauvaise appréciation pour ton stage.
    Il vaut mieux tout lui dire dès le début (sans se plaindre non plus), il sera alors beaucoup plus compréhensif (en plus ça pourra même augmenter l'appréciation de ton stage) et vous pourrez alors revoir les objectifs et trouver quelques solutions.

    Essaye déjà de documenter les parties de codes que tu retouches avec doxygen et là je peux te dire que l'entreprise sera aux anges^^

  6. #46
    Membre éprouvé
    Avatar de mitkl
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 364
    Points : 1 081
    Points
    1 081
    Par défaut
    Dans tous les cas la personne qui a écrit ce code à la base t'as laissé un joli cadeau.

    Je suis d'accord avec Neckara même si je pense que ça va être compliqué. Sans trop connaitre le contexte, si on t'a donné ce code c'est pour que tu fasses quelque chose avec. Si tu dois refaire tout le code de base + la mission d'origine du stage dans une période de temps prévue à la base pour ne faire que la partie "extra", ça risque de ne pas rentrer.
    D'un autre côté, le code a l'air plutôt mal fait et de toute manière tu es bloqué, peu importe ce que tu fais, ta stack est corrumpue, je ne vais pas redire ce que t'as dit Neckara mais il faut vraiment insister au niveau de la maintenabilité pour convaincre ton maitre de stage qu'il faut tout reprendre à zéro. "Tout détruire pour mieux reconstruire"
    Si vous ne savez toujours pas ce qu’est la récursivité, relisez cette phrase.

    Mon blog sur la programmation et l'informatique !

  7. #47
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 57
    Points : 20
    Points
    20
    Par défaut
    Merci les gars pour votre aide je pense que c'est ce que je vais faire la documentation doxygen a déja été faite c'est un bordel pas possible .
    Je vais tenter encore un peu de trouver le problème.
    Je vous tient au courant merci encore.

  8. #48
    screetch
    Invité(e)
    Par défaut
    si tu montres le code de la classe navireimpacteur (le fichier header) on pourra peut-etre voir l'erreur (pas certain certain mais ca vaut le cout)

  9. #49
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 57
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par screetch Voir le message
    si tu montres le code de la classe navireimpacteur (le fichier header) on pourra peut-etre voir l'erreur (pas certain certain mais ca vaut le cout)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
     
    #ifndef NAVIREIMPACTEUR_H_INCLUDED
    #define NAVIREIMPACTEUR_H_INCLUDED
     
    #include <string>
    #include <stdio.h>
    #include <stddef.h>
    #include "Elem_impacteur.h"
    #include "GeometryBow.h"
    #include "GeometryBulb.h"
    //#include "Structure.h"
     
    class Structure;
    class Elem_impacteur;
     
    class navireimpacteur
    {
        private:
            //GEOMETRY
                //Bow
                    bool HasBow;
                    GeometryBow bow;
     
                //Bulb
                    bool HasBulb;
                    GeometryBulb bulb;
     
            //PROPERTIES
                double CG_dist_from_bow;
                double CG_dist_under_deck;
                double DRAUGHT;
                std::vector<Elem_impacteur*> collect_super_elem_etrave;
                std::vector<Elem_impacteur*> collect_super_elem_bulbe;
                std::vector<Structure*> collec_elem_attaches;
                double angleStem;
                double angleSide;
                int nb_node;
            //STRUCTURE
                void init(){
                    HasBow=0;
                    HasBulb=0;};
     
     
        public:
     
            Structure* bowStruct;
            Structure* bulbStruct;
            double nb_elem_L_etrave;
            double nb_elem_T_etrave;
            double nb_elem_X_etrave;
            double nb_elem_L_bulbe;
            double nb_elem_T_bulbe;
            double nb_elem_X_bulbe;
            double nb_super_elem_etrave;
            double nb_super_elem_bulbe;
            navireimpacteur(){init();};
     
            navireimpacteur(double CG_dist_from_bow_p,double CG_dist_under_deck_p,double DRAUGHT_p);
            void SetGeometryBow(GeometryBow gb);
            void SetGeometryBulb(GeometryBulb gb);
            GeometryBow GetGeometryBow(){return bow;};
            GeometryBulb GetGeometryBulb(){return bulb;};
     
            double retour_CG_dist_from_bow(){return CG_dist_from_bow;};
            double retour_CG_dist_under_deck(){return CG_dist_under_deck;};
            double retour_DRAUGHT(){return DRAUGHT;};
            bool retour_HasBulb(){return HasBulb;};
            bool retour_HasBow(){return HasBow;};
            double retour_nb_super_elem_etrave(){return nb_super_elem_etrave;};
            double retour_nb_super_elem_bulbe(){return nb_super_elem_bulbe;};
            double retour_nb_elem_X_etrave(){return nb_elem_X_etrave;};
            double retour_nb_elem_L_etrave(){return nb_elem_L_etrave;};
            double retour_nb_elem_T_etrave(){return nb_elem_T_etrave;};
            double retour_nb_elem_X_bulbe(){return nb_elem_X_bulbe;};
            double retour_nb_elem_L_bulbe(){return nb_elem_L_bulbe;};
            double retour_nb_elem_T_bulbe(){return nb_elem_T_bulbe;};
            std::vector<Elem_impacteur*> retour_collect_super_elem_etrave(){return collect_super_elem_etrave;};
            std::vector<Elem_impacteur*> retour_collect_super_elem_bulbe(){return collect_super_elem_bulbe;};
            void set_HasBow(bool val){HasBow = val;};
            void set_HasBulb(bool val){HasBulb=val;};
            void set_nb_super_elem_etrave(double nb){nb_super_elem_etrave = nb;};
            void set_nb_super_elem_bulbe(double nb){nb_super_elem_bulbe = nb;};
     
     
            //modifications
            std::vector<Structure*> identification_elt_structurel_actif(double xpos , double beta ,bool etrave ,bool bulbe);
            std::vector<Structure*> elem_attaches(bool etrave, bool bulbe, double wb, double beta, Structure* struc);//
            //modifications etrave
            std::vector<Elem_impacteur*> identification_super_elt_actif_etrave(double zmax, double zmin);
            std::string creer_XLT_interne_etrave(bool etrave,bool bulbe,double wb, double beta);//
            std::string creer_XLT_borde_etrave(bool etrave,bool bulbe,double wb, double beta);
            std::vector<Structure*> elem_attaches_borde_etrave(bool etrave, bool bulbe, double wb, double beta, Structure* struc, std::string place);
     
            //modification bulbe
             std::vector<Elem_impacteur*> identification_super_elt_actif_bulbe(double zmax, double zmin);
             std::vector<Structure*> elem_attaches_borde_bulbe(bool etrave, bool bulbe, double wb, double beta);
             std::string creer_XLT_interne_bulbe(bool etrave,bool bulbe,double wb, double beta);
             std::string creer_XLT_borde_bulbe(bool etrave,bool bulbe,double wb, double beta);
             std::vector<node> noeuds_borde(bool etrave,bool bulbe,double wb,double beta);
     
            double retour_angleStem(){return angleStem;};
            double retour_angleSide(){return angleSide;};
            double creer_T(double wb, double beta,bool etrave,bool bulbe,bool borde_bulbe,double x1,double y1,double z1,double x2,double y2,double z2,double x3,double y3,double z3,double x4,double y4,double z4,Structure* sbarre,Structure* spied);
            double creer_L(bool etrave,bool bulbe,double x1,double y1,double z1,double x2,double y2,double z2,double x3,double y3,double z3,Structure* sbarre,Structure* spied);
            double creer_X(bool etrave, bool bulbe, double x1,double y1,double z1,double x2,double y2,double z2,double x3,double y3,double z3,double x4,double y4,double z4,double x5,double y5,double z5);
    };
     
    #endif // NAVIREIMPACTEUR_H_INCLUDED
    j'ai fait pratiquement toutes les boucles de parcours de vector avec des iterateur et maintenant j'ai l'erreur qui apparait de manière aléatoire environ 1 exécution sur 3

  10. #50
    screetch
    Invité(e)
    Par défaut
    hmmmm c'est pas ca qui fait planter puisque navireimpacteur n'a pas de destructeur mais il y a pas mal de problemes potentiels

  11. #51
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 57
    Points : 20
    Points
    20
    Par défaut
    Alors là je ne comprend plus je suis revenu a la version original du logiciel qui était tout a fait fonctionnel je la test et la même erreur !!!!

  12. #52
    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
    ça veut tout simplement dire que la version originale était boguée, ce qui est en soit pas très étonnant.

  13. #53
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 57
    Points : 20
    Points
    20
    Par défaut
    elle fonctionnait très bien et était même utilisé par l'entreprise je l'est aussi testé bizarrement ça fonctionnait et la ça ne fonctionne plus je n'est rien changé pourtant.

  14. #54
    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
    Il me semble qu'entre deux compilations, même si on a rien changé, les fichiers obtenus seront différents.

    il suffit donc de recompiler sans rien modifier pour que les certaines variables ne soient pas à la même place et pour provoquer une SEGFAULT à l'exécution.

  15. #55
    screetch
    Invité(e)
    Par défaut
    ou de compiler en DEBUG au lieu de RELEASE.
    Ou que la lune et jupiter soient alignes.

Discussions similaires

  1. C# Html Agility Pack fait planter le programme
    Par pascal4435 dans le forum C#
    Réponses: 7
    Dernier message: 01/03/2013, 13h55
  2. Réponses: 19
    Dernier message: 24/10/2009, 23h58
  3. Réponses: 3
    Dernier message: 01/03/2009, 18h09
  4. Réponses: 2
    Dernier message: 17/03/2007, 13h43
  5. Réponses: 1
    Dernier message: 08/06/2006, 11h01

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