Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
933 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Ajout d'un vector qui contient lui même un vector

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ajout d'un vector qui contient lui même un vector

n°1728845
sebdu94
Posté le 05-05-2008 à 23:20:52  profilanswer
 

Bonjour à tous,
 
 
j'ai un problème d'allocation mémoire.  
J'ai une classe qui contient un vector. Dans cette classe se trouve une autre classe qui contient aussi un vector.  
Lorsque je récupère un élément avec l'itérateur je peux afficher les attributs. Par contre si je veux l'ajouter à une autre liste de vecteur avec la commande push_back. Il y a une erreur mémoire.
 
Est ce normal ?  Et y a t'il une solution ?
 
 
 
Merci beaucoup

mood
Publicité
Posté le 05-05-2008 à 23:20:52  profilanswer
 

n°1728850
Taz
bisounours-codeur
Posté le 06-05-2008 à 00:06:30  profilanswer
 

Non ça n'est pas normal. Essaie avec des int dans tes vector.

n°1728879
Joel F
Real men use unique_ptr
Posté le 06-05-2008 à 08:53:40  profilanswer
 

pourquoi ne parierais-je pas 5cents sur un problème de FCC :o

n°1728894
Taz
bisounours-codeur
Posté le 06-05-2008 à 09:50:19  profilanswer
 

ICC tu veux dire

n°1728960
sebdu94
Posté le 06-05-2008 à 12:01:24  profilanswer
 

Merci  mais qu'est ce qu'un problème de FCC (ou ICC) ?
C'est en rapport avec le compilateur ?

n°1728971
sebdu94
Posté le 06-05-2008 à 12:24:39  profilanswer
 

Pour info, voila ce que j'obtiens comme erreur lorsque je fais un debug :
 
#0 0x0043625e std::__default_alloc_template<true, 0>::allocate(unsigned) (??:??)
#1 0x004309cc std::__simple_alloc<Transition, std::__default_alloc_template<true, 0> >::allocate(unsigned) (??:??)
#2 0x0043427d std::_Vector_alloc_base<Transition, std::allocator<Transition>, true>::_M_allocate(unsigned) (??:??)
#3 0x0042ec3d std::_Vector_base<Transition, std::allocator<Transition> >::_Vector_base(unsigned, std::allocator<Transition> const& ) (??:??)
#4 0x00436ca3 std::vector<Transition, std::allocator<Transition> >::vector(std::vector<Transition, std::allocator<Transition> > const& ) (??:??)
#5 0x00419edc Liste_transitions::Liste_transitions(Liste_transitions const& ) (??:??)
#6 0x00419ffe Etat::Etat(Etat const& ) (??:??)
#7 0x00438f59 void std::_Construct<Etat, Etat>(Etat*, Etat const& ) (??:??)
#8 0x0043727d std::vector<Etat, std::allocator<Etat> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Etat*, std::vector<Etat, std::allocator<Etat> > >, Etat const& ) (??:??)
#9 0x004376df std::vector<Etat, std::allocator<Etat> >::push_back(Etat const& ) (??:??)
#10 0x00402b27 Liste_etats::ajout_etat(Etat) (??:??)
#11 0x00401f19 Automate::determinisation(Automate& ) (??:??)
#12 0x004033d8 main (??:??)

n°1729042
Taz
bisounours-codeur
Posté le 06-05-2008 à 14:31:07  profilanswer
 

bah ta classe Etat, elle est pourrie.

n°1729695
sebdu94
Posté le 07-05-2008 à 18:18:56  profilanswer
 

La voici :

Code :
  1. class Etat
  2. {
  3. public :
  4.     bool m_est_initial;
  5.     bool m_est_final;
  6.     int m_numero;
  7.     Liste_transitions m_liste_transition;
  8. public :
  9.     Etat();
  10.     Etat(int numero);
  11.     Etat(int numero, bool initial, bool final);
  12.     ~Etat();
  13.     int getNum();
  14.     void est_initial();
  15.     void est_final();
  16.     bool get_initial();
  17.     bool get_final();
  18.     void ajout_transition(int, int,char);
  19.     Liste_etats retour_liste_EA(char c);
  20.     Liste_transitions return_liste();
  21.     Transition return_transition(int i);
  22.     int get_nbr_transitions();
  23. };


 
Elle contient la classe Liste_transitions :

Code :
  1. //la classe Liste_transitions contient une liste de transitions dans un conteneur de type vector
  2. class Liste_transitions
  3. {
  4. private:
  5.     std::vector<Transition> m_tab_transitions;
  6. public:
  7.     //destructeur
  8.     ~Liste_transitions();
  9.     //méthode qui permet l'ajout d'une transition à la liste
  10.     void ajout_transition(int depart,int arrivee, char lettre);
  11.     Liste_etats retour_liste_EA(char c);
  12.     int get_size();
  13.     Transition get_transition(int i);
  14. };


 
qui est formée de transitions :

Code :
  1. //la classe Transition contient les infos d'une transition, cad l'état de départ, l'état d'arrivée, et la lettre
  2. class Transition
  3. {
  4. private:
  5.     int m_depart, m_arrivee;
  6.     char m_etiquette;
  7. public:
  8.     Transition();
  9.     Transition(int, int, char);
  10.     int get_arrivee();
  11.     char get_etiquette();
  12. };


 
 
En fait idéalement je voudrais récupérer un objet Liste_transitions tel quel mais ça ne fonctionne pas.
 
 
Avez vous une idée ?

n°1729696
sebdu94
Posté le 07-05-2008 à 18:23:36  profilanswer
 

Est ce que le conteneur vector utilise des pointeurs avec allocation dynamique ?  ou est ce qu'il est en théorie possible de récupérer une classe contenant un vector ? (comme la classe Liste_transitions)
 
 
Merci d'avance

n°1729741
Taz
bisounours-codeur
Posté le 07-05-2008 à 21:14:52  profilanswer
 

Avec tes classes comme ça, si tu ne fais pas n'importe quoi dans ton destructeur et tes constructeurs, ça veut dire que tu quiches au niveau de la manipulation du vecteur.

mood
Publicité
Posté le 07-05-2008 à 21:14:52  profilanswer
 

n°1729742
sebdu94
Posté le 07-05-2008 à 21:17:58  profilanswer
 

Je ne fais pas de constructeur pour les classes vector.  Peut être est-ce ça l'erreur ?
 
 
Par contre, je fais des destructeurs comme ceci :

Code :
  1. //Destructeur de Liste_transitions
  2. Liste_transitions::~Liste_transitions()
  3. {
  4.                     m_tab_transitions.~vector<Transition>();
  5. }

n°1729755
Joel F
Real men use unique_ptr
Posté le 07-05-2008 à 22:19:37  profilanswer
 

n'importe quoi. Les destructeurs agrégés sont appelés directement :o
Enleve cette horreur

n°1729811
sebdu94
Posté le 08-05-2008 à 01:31:32  profilanswer
 

Merci pour les réponses.   ça marche !! J'ai corrigé quelques erreurs et enlever l'horreur ;).
 
Encore merci


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Ajout d'un vector qui contient lui même un vector

 

Sujets relatifs
Concaténer deux vectorVector en C++ - Optimisation de la recherche
[C/C++] Copie d'un std::vectorProblème d'ajout vb6
[Résolu] porté d'une variable vector[jdbc] probleme d'ajout du driver
Ajout et suppression de champFormulaire - Ajout d'un champ
Problème avec vector lors de l'exécution du programme[MS BATCH] ajout de route persistante sur plusieurs machines
Plus de sujets relatifs à : Ajout d'un vector qui contient lui même un vector


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR