Bonjour,
Je suis à la recherche des éventuelles fuites de mémoire pouvant se trouver dans mon code et memcheck/valgrind me sort la chose suivante (entre autres) au niveau de la mise à jour de mon VBO :
Or justement, le contenu de la méthode updateCoordonneesVertex() est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 ==2601== Invalid write of size 1 ==2601== at 0x04027420: memcpy (mc_replace_strmem.c:497) ==2601== by 0x08057291: ObjetVP::updateCoordonneesVertex() (ObjetVP.cpp:227) ==2601== by 0x08057977: ObjetVP::refreshAffichage() (ObjetVP.cpp:416) ==2601== by 0x0805c7d8: TextureVP::display() (TextureVP.cpp:149) ==2601== Address 0xb6ed741e is not stack'd, malloc'd or (recently) free'd ==2601==
Je ne comprends pas d'où vient l'erreur sachant que :
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 /** * Met à jour les coordonnées des vertex du VBO. * @return -1 en cas d'erreur, 0 sinon */ int ObjetVP::updateCoordonneesVertex() { // Début de la communication avec le VBO glBindBuffer(GL_ARRAY_BUFFER, vboId); pos_vbo = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY); if (pos_vbo == NULL) { return -1; } printf("sz tabVertex: %d --- nbVertex: %d --- sz Vertex: %d\n", sizeof(tabVertex), NB_VERTEX, sizeof(Vertex)); // Transfert de la mise à jour au VBO memcpy(pos_vbo, tabVertex, NB_VERTEX * sizeof(Vertex)); // On termine la communication avec le VBO glUnmapBuffer(GL_ARRAY_BUFFER); pos_vbo = NULL; return 0; }
- La ligne du printf() me renvoie bien "sz tabVertex: 7200 --- nbVertex: 225 --- sz Vertex: 32".
- Je ne pense pas avoir fait quelque chose de trop différent du tuto dont je me suis inspiré.
Donc si vous avez une idée... O_o
Merci et bonne journée.
Partager