#1 

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 smile.


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#2 

10-06-2009 18:04:03

tmyke
Administrateurs
Avatar de tmyke
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


#3 

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


#4 

10-06-2009 18:38:14

tmyke
Administrateurs
Avatar de tmyke
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


#5 

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


#6 

10-06-2009 18:59:49

tmyke
Administrateurs
Avatar de tmyke
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


#7 

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


#8 

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


#9 

10-06-2009 20:34:55

tmyke
Administrateurs
Avatar de tmyke
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


#10 

12-06-2009 17:32:31

Magun
Administrateurs
Avatar de Magun
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 wink
et sa marche impeccable ...
en gros je supprime toute les entités puis je vide l'array

Hors ligne


#11 

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 

12-06-2009 23:29:51

Magun
Administrateurs
Avatar de Magun
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


Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
119 invités en ligne
membre en ligne: -
RSS Feed