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 :
- typedef struct _tVertice
- {
- float v[3]; // { x, y, z }
- }tVertice;
- // Pareil pour des structures de coordonnée de texture et normale
|
Ces structure sont ensuite utilisées dans des tableaux alloués dynamiquement :
Code :
- tVertice * m_ptVerticeTab;
|
Par ailleurs, j'ai des vector de structure :
Code :
- vector <tMaterial> m_vectorMat;
|
Avec tMaterial :
Code :
- typedef struct _tMaterial
- {
- float Ka[3];
- float Kd[3];
- float Ks[3];
- float Ns;
- string map_Kd_name;
- string mat_name;
-
- bool hasgottexture;
- bool hasgottextureAlpha;
- int id_texture;
-
- vector<tFace> vector_mat_face; // Vector contenant les faces appartenant au material considéré
- }tMaterial;
- // tFace
- typedef struct _tFace
- {
- int vertexInd [3];
- int vertexTexInd[3];
- int vertexNorInd[3];
-
- CVector vABC; // Les coeffA, B et C de l'équation d'un plan
-
- float D; // Le coeffient D de l'équation du plan
-
- }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 :
- //---pour le vector de materiaux
- tMaterial mat_a_ajouter;
- // remplir les infos de mat_a_ajouter
- mat_a_ajouter.Ka[0] = flottant;
- //... puis ajouter le ma au vector de mat
- m_vectorMatAlpha.push_back(mat_a_ajouter);
- //---pour le vector de face
- tFace Face_a_ajouter;
- Face_a_ajouter.D = flottant;
- // ...Remplir les infos de la structure (vABC, D et indices de toutes sortes)...
- // Ajouter ça au vector de materiaux à l'indice courant
- //(vector contenu dans une structure elle même contenue dans un vector):
- 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