[VC++2005] D�passement de tableau en d�bug, pas de bug en release ?
Bonsoir.
J'ai un bug assez �trange je trouve. J'ai dans mon moteur 3d un tableau de patches, cr�� � partir d'une image de 1025x1025.
J'initialise les variables avec :
Code:
1 2 3 4 5 6
| bool TGeoMipMapping::Init( int iPatchSize )
{...
m_iPatchSize= iPatchSize; //iPatchSize a pour valeur 17
m_iNumPatchesPerSide= m_uiSize/m_iPatchSize; //m_uisize a pour valeur 1025 (la taille d'un coté de l'image)
m_pPatches= new S_PATCH [SQR( m_iNumPatchesPerSide )];
...} |
Donc, mon tableau a finalement une taille de 3600 (60*60)
Or dans un des m�andres de mon code, il y a ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
int GetPatchNumber( int PX, int PZ )
{ return ( ( PZ*m_iNumPatchesPerSide )+PX ); }
void TGeoMipMapping::RenderPatch( int PX, int PZ, bool bMultiTex, bool bDetail )
{...
int iPatch= GetPatchNumber( PX, PZ );
...
if( m_pPatches[GetPatchNumber( PX, PZ+1 )].m_iLOD<=m_pPatches[iPatch].m_iLOD || PZ==m_iNumPatchesPerSide )
patchNeighbor.m_bUp= true;
else
patchNeighbor.m_bUp= false;
...
} |
que j'ai remplac� par ceci pour savoir o� �tait le bug:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| void TGeoMipMapping::RenderPatch( int PX, int PZ, bool bMultiTex, bool bDetail )
{...
int iPatch= GetPatchNumber( PX, PZ );
...
int ipatchtemp = GetPatchNumber( PX, PZ+1 );
int t = m_pPatches[ipatchtemp].m_iLOD;
if( m_pPatches[ipatchtemp].m_iLOD<=m_pPatches[iPatch].m_iLOD || PZ==m_iNumPatchesPerSide )
patchNeighbor.m_bUp= true;
else
patchNeighbor.m_bUp= false;
...
} |
Le programme plante sur (int t = m_pPatches[ipatchtemp].m_iLOD; ) parce que, logiquement, PZ a atteint 59, et en faisant (59+1)*60 + n'importe quelle valeur de PX, je d�passe mon tableau qui a une taille maxi de 3600.
Maintenant la question : comment se fait-il que lorsque que je lance le prog en faisant ctrl+F5 (sans debug), le programme plante l� dessus, avec seulement F5 (debug), il ne plante pas, et en mode release(CTRL F5) non plus ? Est ce Visual qui ajoute des routines de v�rification al�atoirement ? Ou bien est ce moi qui ai loup� quelque chose sur les tableaux en C++ ?