BumpMANN
Messages postés330Date d'inscriptionjeudi 22 mai 2003StatutMembreDernière intervention26 janvier 2009
-
26 mai 2006 à 15:21
BumpMANN
Messages postés330Date d'inscriptionjeudi 22 mai 2003StatutMembreDernière intervention26 janvier 2009
-
26 mai 2006 à 18:47
Bonjour!
J'ai un probleme tres etrange et j'aimerai savoir si quelqu'un a deja
eu un probleme de ce genre, ou a une piste pour le resoudre.
Je programme avec Visual Studio 2003 pro, et je programme un mmorpg.
Pour pouvoir avoir plusieurs persos j'utilise une liste chainée de
classes de persos. Voila la fonction qui permet de recupérer un perso
soit non utilisé, soit d'en créer un nouveau si les autres sont
utilisés:
CPerso *CPerso::List_GetFree()
{
CPerso *ls;
if(Root==NULL)
return NULL;
for(ls = Root; ls != NULL && ls->used != false; ls = ls->Next);
if(ls!=NULL)
return ls;
// exit(5);
CPerso *nper = new CPerso;
// exit(5);
List_Add(nper);
return nper;
}
Le bug etrange maintenant, c'est que quand je lance le programme en
mode debuggage (F5 sur vs) il n'y a pas de probleme, je peux etre a 3
sur la meme map (j'ai pas essayé plus). En revanche si je lance l'exe,
ca plante, meme si le deuxieme exit(5) est decommenté. Si je decommente
le premier exit(5), il n'y a pas de probleme, ca quitte le prog sans
bug. Donc j'en ai deduit que c'est le new...
Je pensais que le new plantait que s'il n'avait pas assez de mémoire
libre, mais la c'est bizarre.. (puisqu'avec f5 ca marche nikel, et la
mémoire utilisée est stable)
HRESULT LoadTexture(LPDIRECT3DDEVICE9 pDevice, char *pcFilename, int iIndex = 0);
HRESULT MakeNormalMap(WORD iIndex);
HRESULT SetCamera(CNVOCamera *Cam);
HRESULT Draw();
HRESULT PreDraw();
HRESULT PostDraw();
};
en gros comme ca ca marche, si je decommente instance ca plante, mais
si je change par exemple DWORD m_dwWidth en WORD en plus, ca remarche!
C'est pas possible qu'une classe bug a l'octel pret comme ca
>_<;;; Avec un compteur static j'arrive avec 68 images
chargées... (61 en comptant les déchargées)
Ah! je viens de changer un truc là... j'ai viré le menu ingame (c'est pas moi qui l'ai fait, c'est mon pote )
et je suis descendu a 4 images (chargées - déchargées)... vais lui
demander d'optimiser ca puisque maintenant debug et exe marchent ^^
cs_bouba
Messages postés518Date d'inscriptiondimanche 2 décembre 2001StatutMembreDernière intervention10 novembre 20073 26 mai 2006 à 16:20
Le constructeur à l'air OK, si les constructeurs CNVOImage et SNVORect le sont aussi ça devrait être bon. Par contre tu as essayé en mettant un exit() après le List_Add ? Comment sont gérées tes listes ? Ca arrive qu'un prog ne plante pas en debug mais plante en release, le truc c'est que tu accèdes à des zones mémoires où tu ne devrais pas accéder. Vérifies nickel les constructeurs de CNVOImage et SNVORect, ensuite faits un test en créant style 200 CPerso pour voir (en désallouant correctement), je ne suis pas sûr que le problème vienne du new.
Vous n’avez pas trouvé la réponse que vous recherchez ?
BumpMANN
Messages postés330Date d'inscriptionjeudi 22 mai 2003StatutMembreDernière intervention26 janvier 2009 26 mai 2006 à 17:39
Hmm... ya un peu de nouveau :/ j'avais oublié de mettre un destructeur
pour CNVOImage donc je l'ai rajouté... mais maintenant ca bug avec f5,
au meme endroit, mais plus precisément dans le constructeur de
CNVOImage, au new de m_pTexture = new LPDIRECT3DTEXTURE9[MULTITEX_MAX];
qui renvoie un pointeur nul. (juste pour le new du CPerso en question
puisqu'il charge d'autres images avant et les affiche sans probleme).
Avant d'avoir fait ca j'ai essayé de rajouter un tableau de 200 CPerso et ca marchait bien en debug.