Hello,
J'aurrai souhaité savoir si d'autre avaient eu un souci avec les core::array sur la méthode ArrayType.erase(int Index) ?
Visiblement ça delete pas correctement, j'arrive pas à trouver ce qui cloche, mais tout mon code est foutu en l'air avec ça .
Hors ligne
Copland :
Hello,
J'aurrai souhaité savoir si d'autre avaient eu un souci avec les core::array sur la méthode ArrayType.erase(int Index) ?
Je n'utilise pas plus que cela ces fonctions. Il s'agit de ce code ?
//! Erases an element from the array. /** May be slow, because all elements following after the erased element have to be copied. \param index: Index of element to be erased. */ void erase(u32 index) { _IRR_DEBUG_BREAK_IF(index>=used) // access violation for (u32 i=index+1; i<used; ++i) { allocator.destruct(&data[i-1]); allocator.construct(&data[i-1], data[i]); // data[i-1] = data[i]; } allocator.destruct(&data[used-1]); --used; }
Hors ligne
En fait ça semble plustôt lié au ArrayType.clear(), mais je comprends pas ou ça déconne avant ça marchais nickel mon code.
void CShadowSceneNode::RemoveAllShadowToNode() { for (u32 i=0;i<NodeList.size();++i) { NodeList[i].Enable = false; NodeList.erase(i); } NodeList.clear(); }
Si j'utilise le clear, ça fait n'importe quoi dans la liste, elle est erronnée, si je commente le clear tout fonctionne à parament....
Hors ligne
Si tu écris cela, est-ce que cela n'est pas mieux ?
void CShadowSceneNode::RemoveAllShadowToNode() { for (u32 i=0;i<NodeList.size();++i) { NodeList[i].Enable = false; } NodeList.clear(); }
voir plus simplement encore
void CShadowSceneNode::RemoveAllShadowToNode() { NodeList.clear(); }
dans la mesure ou tes élément de la liste sont détruit, faire un NodeList[i].Enable = false; ne sert pas à grand choses, non ?
Hors ligne
NodeList.clear(); direct comme ça, ça ne fonctionne pas...Pourtant ça devrait :s
Hors ligne
Hmm, étrange,
Dans la fonction 'Clear' de arrayType, essais en commentant la ligne allocator.deallocate(data); // delete [] data;
si c'est possible.
Hors ligne
Hum j'ai testé et le problème est identique je comprends pas trop, enfin bon vais virer le clear() et basta
Hors ligne
Alors j'ai pas rêvé, dans certaines conditions le erase ne fait pas son boulot et dans d'autre, le clear pose problème, ça sent la mauvaise gestion de pointeur dans le code d'irrlicht...je sais pas ce qu'ils ont pû trifouiller, j'espère que ça sera résolvé dans la prochaine release
Hors ligne
Hmmm, en effet à suivre, car c'est relativement pas mal utilisé dans le moteur. Si cela sent le bug, c'est pas top...
Hors ligne
perso avec un core::array je delete l'élément avants de faire un remove ou un clear
et sa marche impeccable ...
en gros je supprime toute les entités puis je vide l'array
Hors ligne
oué magun sauf que tu delete quand il s'agit de pointer et là c'est pas mon cas, c'est un tableau de struct....
Hors ligne
tu peut mettre un destructeur dans une struct normalement ... enfin ses toi qui voie
Hors ligne