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

  FORUM HardWare.fr
  Programmation
  C++

  [STL] pb vector de structure contenant des tableaux

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[STL] pb vector de structure contenant des tableaux

n°731643
stochastik
Posté le 19-05-2004 à 15:47:33  profilanswer
 

Bonjour tous le monde,
 
Voilà, j'ai voulu testé la STL et comme je suis une brèle bah j'arrive po à résoudre un truc. J'ai des vectors de structures.  
 
Enoncé
 
Les structures sont du type suivant :
 

Code :
  1. typedef struct _tVertice
  2. {
  3.     float v[3]; // { x, y, z }
  4. }tVertice;
  5. // Pareil pour des structures de coordonnée de texture et normale


Ces structure sont ensuite utilisées dans des tableaux alloués dynamiquement :

Code :
  1. tVertice   * m_ptVerticeTab;


 
Par ailleurs, j'ai des vector de structure :

Code :
  1. vector <tMaterial> m_vectorMat;


 
Avec tMaterial :

Code :
  1. typedef struct _tMaterial
  2. {
  3.     float Ka[3];
  4.     float Kd[3];
  5.     float Ks[3];
  6.     float Ns;
  7.     string map_Kd_name;
  8.     string mat_name;   
  9.    
  10.     bool hasgottexture;
  11.     bool hasgottextureAlpha;   
  12.     int id_texture;
  13.    
  14.     vector<tFace> vector_mat_face; // Vector contenant les faces appartenant au material considéré
  15. }tMaterial;
  16. // tFace
  17. typedef struct _tFace
  18. {
  19.     int vertexInd   [3];
  20.     int vertexTexInd[3];
  21.     int vertexNorInd[3];
  22.    
  23.     CVector vABC;       // Les coeffA, B et C de l'équation d'un plan
  24.                        
  25.     float D;            // Le coeffient D de l'équation du plan
  26.                  
  27. }tFace;


 
Donc ça fait 2 vectors qui trainent, vector<tFace> et vector <tMaterial>
Deux vectors contenant des tableau[3] et pis un peu n'imp" (un objet CVector).
 
Pour remplir les vector, je la joue peut être bourrin, je fais comme ça :

Code :
  1. //---pour le vector de materiaux
  2. tMaterial mat_a_ajouter;
  3. // remplir les infos de mat_a_ajouter
  4. mat_a_ajouter.Ka[0] = flottant;
  5. //... puis ajouter le ma au vector de mat
  6. m_vectorMatAlpha.push_back(mat_a_ajouter);
  7. //---pour le vector de face
  8. tFace Face_a_ajouter;
  9. Face_a_ajouter.D = flottant;
  10. // ...Remplir les infos de la structure (vABC, D et indices de toutes sortes)...
  11. // Ajouter ça au vector de materiaux à l'indice courant
  12. //(vector contenu dans une structure elle même contenue dans un vector):
  13. m_vectorMatAlpha[indiceMatCourant].vector_mat_face.push_back(Face_a_ajouter);


 
le problème
 
Le problème c'est que quand je remplit certaines choses dans les tableaux alloués dynamiquement, bah ça fait planter le tout.  
J'ai 3 tablaux alloués dynalmiquement, j'alloue les 3 de la taille que je veux et je remplit les 2 1er, ça passe lors de toute les séries de push_back() que je fais ensuite sur les vector.
Je rempli mon 3eme tableau alloué dynamiquement (avec des structures du type tVertice, c a dire juste un tab de 3 float) et là plus moyen de faire tous les push_back() d'un des deux vectors ; celui contenant des faces (et lui même contenu dans une structure tMaterial qui est elle même vouée à être contenue dans un vector.
 
Et là j'arrive pas a enchainer 2 push_back() pour le vector contenant les faces pour un material donné. A part si je fais un reserve de N, alors je pourrais rentré N faces.
 
Donc je sais pas trop d'où ça vient, si c'est du fait que les structures contiennent des tab[], et que de ce fait y'a des recopie de pointeurs et lors d'un redimensionnement du vector bah paf, ça se fait écraser et puis plantage.  
 
Donc si quelqu'un a une idée du prob (outre le fait qu'il faudrait que j'arrête de programmer), je suis tout ouïe.
 
Merci.
 
ps : chuis sous devcpp 4.9.8.9
 
 

mood
Publicité
Posté le 19-05-2004 à 15:47:33  profilanswer
 

n°731762
Taz
bisounours-codeur
Posté le 19-05-2004 à 16:45:37  profilanswer
 

oh du C !
 
entre ta notation hongroise, tes typedef C, ta notation à la con, tes identifiants, j'ai rien bité du tout ... alors t'étonnes pas de te perdre. t'as le droit à un ruban "code immaintenable"
 
y a rien de bourrin à faire des conneries ... vérifie tes allocations et sors ton debugger

n°732860
jaylee
Posté le 20-05-2004 à 17:38:47  profilanswer
 

Plusieurs choses :  
 
En C++, les structures sont implicitement des types il est donc inutile d'utiliser typedef. N'utilises pas le mot clé struct, utilise plutot class et utilise la forme canonique pour les créer.
 
Il n'y a pas tout le code dans tes exemples, on ne peut pas vraiment t'aider ici. Cependant, il y a peut-être un problème du au manque de constructeur de copie dans tes classes.
 
Autre chose : La méthode vector::reserve ne fait que préallouer la mémoire. Pour effectivement utiliser cette mémoire, il faut quand même appeler la fonction push_back pour utiliser ces emplacements réservés.
 
Une dernière chose, évites les mélanges de francais et d'anglais... c'est une horreur ton code (et pas que pour ca).
 
--
Jay
{Epitech.}
http://msdn.labtech.epitech.net/blogs

n°734297
stochastik
Posté le 21-05-2004 à 22:31:36  profilanswer
 

C'était bien des probs de recopie qui faisaient foirer (en plus de moi donc). J'ai tout viré pour des classes avec des noms compréhensibles et lisibles.
J'vous remercie tous les deux des conseils, c'est vrai que c'est pas bô.

n°734301
bjone
Insert booze to continue
Posté le 21-05-2004 à 22:37:12  profilanswer
 

alors tu te lances dans le plug-in pour Max ?

n°734316
stochastik
Posté le 21-05-2004 à 22:46:37  profilanswer
 

oué, vite fais. Je vais me pendre d'abord :D.
 
Nan plus sérieusement, je vais essayer de manger un peu plus de doc et de code de plug in, et surtout arrêter de coder comme un porc a la va vite sans trop penser et pis plus savoir d'où ça vient (le debugger de devcpp m'indiquais pas grand chose puisqu'il ne s'arrêtait pas là où ça plantait mais continuais gentillement jusqu'a arriver à l'éxécution du programme, donc j'voyais pas trop ce qui se passait vu que ça plantait plus en mode debug).
 
Et toi ton exporter se bonifie ?

n°734331
bjone
Insert booze to continue
Posté le 21-05-2004 à 23:11:00  profilanswer
 

non je suis sur des pitis shaders à la con (j'essayes de faire une atmosphère à mes boules :D).


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

  [STL] pb vector de structure contenant des tableaux

 

Sujets relatifs
Comment insérer un caractère dans 9000 cellules contenant un nombreProbleme avec Visual C++ et la STL
[C++/STL] list et parcours avec un itérateur : problème[ACCESS] Tableaux d'affichage tout simple dans un état
[JAVA ]utilisation de la classe Vectorpeut on exporter une structure définie dans une DLL
addition de chaine contenant des datesQuestion conne tableaux
Enregistrer et lire une structure dans un fichierenregistrer une structure contenant des bitmaps
Plus de sujets relatifs à : [STL] pb vector de structure contenant des tableaux


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)