Pourquoi ne pas passer la map par (const)reference ?
Contient-elle beaucoup de données ? Combien de mémoire disposes-tu sur la machine ?
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.
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.
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.
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.
navireimpacteur, il a un constructeur de copie?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 navireimpacteur strikingShip = InputXmlManager::recuperation_donnees_strikingship(cp.retour_strikingFilePath(),listMat);
Ce qui suit est un peu HS par rapport à ton problème mais je pense que ça devrait t'aider pour ton stage :
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 :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.
- 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^^
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 !
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.
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)
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
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
hmmmm c'est pas ca qui fait planter puisque navireimpacteur n'a pas de destructeur mais il y a pas mal de problemes potentiels
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 !!!!
ça veut tout simplement dire que la version originale était boguée, ce qui est en soit pas très étonnant.
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.
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.
ou de compiler en DEBUG au lieu de RELEASE.
Ou que la lune et jupiter soient alignes.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager