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