10-06-2009 17:46:01
- Copland
- Modérateurs
- Date d'inscription:
- Messages: 657
- IP: 92.146.210.116
- Courriel Site web
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
.
Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.
Hors ligne
10-06-2009 18:04:03
- tmyke
- Administrateurs

- Date d'inscription:
- Messages: 1025
- IP: 90.56.250.151
- Courriel
Copland Ecris:
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;
}Force et sagesse...
Hors ligne
10-06-2009 18:06:49
- Copland
- Modérateurs
- Date d'inscription:
- Messages: 657
- IP: 92.146.210.116
- Courriel Site web
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....
Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.
Hors ligne
10-06-2009 18:38:14
- tmyke
- Administrateurs

- Date d'inscription:
- Messages: 1025
- IP: 90.56.250.151
- Courriel
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.Enable = false; ne sert pas à grand choses, non ?
Force et sagesse...
Hors ligne
10-06-2009 18:47:31
- Copland
- Modérateurs
- Date d'inscription:
- Messages: 657
- IP: 92.146.210.116
- Courriel Site web
NodeList.clear(); direct comme ça, ça ne fonctionne pas...Pourtant ça devrait :s
Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.
Hors ligne
10-06-2009 18:59:49
- tmyke
- Administrateurs

- Date d'inscription:
- Messages: 1025
- IP: 90.56.250.151
- Courriel
Hmm, étrange,
Dans la fonction 'Clear' de arrayType, essais en commentant la ligne allocator.deallocate(data); // delete [] data;
si c'est possible.
Force et sagesse...
Hors ligne
10-06-2009 19:57:56
- Copland
- Modérateurs
- Date d'inscription:
- Messages: 657
- IP: 92.146.210.116
- Courriel Site web
Hum j'ai testé et le problème est identique je comprends pas trop, enfin bon vais virer le clear() et basta
Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.
Hors ligne
10-06-2009 20:25:37
- Copland
- Modérateurs
- Date d'inscription:
- Messages: 657
- IP: 92.146.210.116
- Courriel Site web
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
Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.
Hors ligne
10-06-2009 20:34:55
- tmyke
- Administrateurs

- Date d'inscription:
- Messages: 1025
- IP: 90.56.250.151
- Courriel
Hmmm, en effet à suivre, car c'est relativement pas mal utilisé dans le moteur. Si cela sent le bug, c'est pas top...
Force et sagesse...
Hors ligne
12-06-2009 17:32:31
- Magun
- Administrateurs

- Date d'inscription:
- Messages: 910
- IP: 90.5.31.50
- Courriel Site web
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
12-06-2009 23:04:24
- Copland
- Modérateurs
- Date d'inscription:
- Messages: 657
- IP: 92.146.210.116
- Courriel Site web
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....
Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.
Hors ligne
12-06-2009 23:29:51
- Magun
- Administrateurs

- Date d'inscription:
- Messages: 910
- IP: 90.5.31.50
- Courriel Site web
tu peut mettre un destructeur dans une struct normalement ... enfin ses toi qui voie
Hors ligne



