Salut, Bonne Année 2008 à tous, et merci pour vos réponses. J'ai trouvé le problème : en fait, si la fonction cause un arrêt, c'est parce que g.Wmesh n'est pas crée à cause d'une corruption du tas ("Heap corruption") mais je ne sais pas à quoi cela est dû. Je mets ici un pseudo code de la partie à problème:
for(int n = 0; n < une_certaine_valeur; ++n)
{
for(int a = 0; a < une_autre_valeur; ++a)
{
buildSubMesh(); //une de mes fonctions
}
}
void buildSubMesh()
{
ID3DXMesh** Temp = new ID3DXMesh*; //ID3DXMesh* est le type de gWmesh
...
HR(D3DXCreateMesh(....,....,......Temp));
....
...
...
SubGrid g; //SubGrid une structure contenant un ID3DXMesh*
g.Wmesh = (*Temp);
mSubGrids.push_back(g); // mSubGrids le fameux vector de SubGrid qui n'était pour rien
delete Temp;
}
Voilà; pour a=0 et a=1 tout se déroule correctement la macro HR(x) voit des S_OK mais, pour a=3, "ID3DXMesh** Temp = new ID3DXMesh*;" est exécuté correctement et dès la validation de CreateMesh, dans la fenêtre de sortie, il est écrit "Heap corruption" et HR(x) voit un E_OUTOFMEMORY(mais l'execution ne sera arrêtée que plus tard).
Même en activant le mode debug je n'est pas plus de précision sur mon code, à part que l'exécution s'arrête aussitôt le problème rencontré et m'envoie sur
cette partie du code du fichier(fourni avec le sdk ou visual c++) xutility :
template<class _InIt> inline
void __CLRCALL_OR_CDECL _Debug_range(_InIt _First, _InIt _Last, const wchar_t *_File, unsigned int _Line)
{ // test iterator pair for valid range
là-> _Debug_range2(_First, _Last, _File, _Line, _Iter_cat(_First));
}
Normalement, si j'alloue de la memoire dans le tas dans une fonction à l'aide de new, utiliser delete libère cet espace et le fait que ce soit local n'est-il pas censé garantir qu'à chaque appel de "buildSubMesh()" "Temp" n'ait rien à voir avec les précedents ?
:cry:Je ne comprend vraiment plus rien.