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 : S�lectionner tout - Visualiser dans une fen�tre � part
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 : S�lectionner tout - Visualiser dans une fen�tre � part
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 : S�lectionner tout - Visualiser dans une fen�tre � part
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++ ?