Bonjour à tous,
je travail actuellement sur un moteur 3D directX10 mais mon problème vient d'une notion de C++ qu'il doit me manquer.
J'essaie de permettre à l'utilisateur de créer autant d'instances d'un objet(mesh) qu'il le souhaite, la solution qui m'est venue en tête de prime abord est la suivante :
Ce code fonctionne uniquement si dans le destructeur de ma classe sphere
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 vector<sphere> mSph; mSph.push_back(sphere()); //a chaque appui sur une touche mSph.back().init(); //initialise les propriétés de ma sphere
je commente le code qui permet de libérer le vertex buffer, l'index buffer et le textureBuffer, dans le cas contraire j'ai un erreur d'accès en mémoire dès le push_back de mon objet anonyme dans le vecteur :
Si je commente ces lignes j'ai un gros problème de fuite mémoire au véritable moment ou j'ai besoin de libérer ces objets car le destructeur ne sert plus à rien et des Mo de texture, de VB et d'IB s'empilent dans la mémoire sans être libérés. Néanmoins une fois ces lignes commentés le programme fonctionne tout à fait correctement et crée les sphères dynamiquement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SAFE_RELEASE(mVB); SAFE_RELEASE(mIB); SAFE_RELEASE(textureBuffer);
J'aimerais savoir pourquoi le destructeur est-il appelé à l'instanciation?
De plus le SAFE_RELEASE est sensé prévenir contre les risques d'accès en mémoire puisque le release n'est réalisé que si l'objet existe réellement.
Merci par avance !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Exception non gérée à 0x012ff911 dans x.exe*: 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0xcccccccc.
Partager