-
Cela sent la corruption de mémoire sans rapport avec la ligne que tu nous montres.
De sûr j'ai repéré un problème lié aux copies que tu n'as pas interdites. Après, les vecteurs m'entretiennent trop dans ma fainéantise pour que je regarde plus précisément le code (gérant mal la mémoire ; et à 100 lieues d'un ECM) d'un autre à une heure pareille. :roll:
-
C'est justement parce que je galère avec mon code que je poste, sachant qu'il y a sur ce forum des gens bien plus qualifié. Pourrais-tu m'éclairer sur les copies non interdites? Qu'est-ce qu'un ECM?
-
Exemple
Complet -> compile et reproduit le problème observé
Minimal -> rien de superflu (beaucoup de superflu dans l'extrait que tu as donnée -- pas celui avec juste le new, qui était tout sauf complet)
Deux avantages aux ECM:
- On est plus susceptibles de regarder -- ce que tu décris sent à plein nez la corruption qui fait tout planter 5 minutes après (/500 lignes de codes après...) ; cherchez pas ailleurs avec vos try-catch, il y a largement assez de mémoire pour charger une image ; ceci dit il y a une superbe fuite dans ta fonction de remplissage
- Trouver l'ECM permet à celui dans le besoin de comprendre et voir à partir de quel moment cela ne va plus, et de réfléchir au pourquoi. Bref, à progresser.
Et en toute honnêteté (et je suis surpris qu'après deux pages je sois le premier à t'y pousser ; j'ai manqué un message?), les vecteurs sont tes amis. Surtout pour gérer des tableaux dynamiques. Tu y gagneras en robustesse, maintenabilité, cachets d'aspirine consommés, ...
NB: les vecteurs ne dispensent pas plus tard d'apprendre à manipuler correctement la mémoire -- pour au final retourner vers les vecteurs ou toute autre solution RAII adaptée au problème (-> FAQ!)
-
Ok pour les vecteurs mais mon tableau est en fait un tableau de sommets destinés à être envoyés à glDrawElement qui réclame un pointeur vers un tableau de vertices. Sinon j'avoue que j'ai beau y regarder de plus près je ne vois pas la belle fuite memoire dans ma fonction de remplissage:oops:
-
Tu peux vraisemblablement passer &vect[0].
-
La fuite de mémoire est au niveau de ton new.
L'allocaton n'étant pas dans le constructeur, j'en déduis que la fonction peut être appellée plusieurs fois. Au deuxième appel, cela fuira. A moins qu'il y ait une fonction de libération. De toutes façon, pour corriger ton problème, il faut revoir/reprendre l'intégralité des cycles de vie (éventuellement multiples) de tes zones de mémoires allouées dynamiquement.
Si j'ai d'autres conseils à donner:
- que Buffer ait l'entière responsabilité de ses membres => interdiction à l'extérieur de modifier quoique ce soit -- cf encapsulation, couplage, ...
- nbr_mesh porte mal son nom (vu qu'il contient le nombre - 1)