On 27 Apr 19:09, Pierre THIERRY wrote:
> Je commence par les d�s, et je suis tomb� sur un os�: une de mes
> classes comprend un m�thode qui est cens�e d�sallouer des objets dont
> les pointeurs sont stock�s dans un conteneur de la STL, qui est un
> membre priv� de la classe, et vider celui-ci au passage.
> 
> Avec trois types diff�rents, j'obtiens trois bugs diff�rents, l'un tr�s
> grave.

Le probl�me est
template<class T> Dice operator <<(const T & addendum)
{
    append(&addendum);
    return *this;
}

Tu dois retourner une *r�f�rence* sur ton Dice pas un nouvel objet. En
effet, tu vas cr�er des objets temporaires (un par appel a <<) qui
r�f�rencent le m�me vecteur. Ils vont tous essayer de le d�sallouer l'un
apr�s l'autre, d'o� le bug.

Si tu change le protype pour retourner une r�f�rence:
template<class T> Dice& operator <<(const T & addendum)
tout marchera impec.

Si tu avais con�u ta classe correctement, tu aurais rep�rer le prb tout
de suite.  Les versions de l'op�rateur= et du constructeur par recopie
g�n�r�s par le compilateur ne sont pas correctes pour l'objet Dice. 
Tu dois donc les �crire toi m�me si tu veux autoriser la copie d'objet
Dice.  Sinon �clare ces deux m�thodes "private".

> Au passage, est-ce que ce n'est pas un bug gravissime dans le noyau
> (probablement dans l'ordonnancement) qu'un plantage pareil puisse
> arriver�?

En effet, ton noyau doit avoir un probl�me (certainement pas
d'ordonnancement par contre) car aucune t�che utilisateur ne devrait
planter le noyau (si tu lances pas le programme en root et encore dans
ce cas pr�cis, �a ne devrait rien changer).

Je te sugg�re de mettre � jour ton noyau.  Le mieux ne plante pas
quelque soit le conteneur.

A+

-- 
Guillaume Morin <[EMAIL PROTECTED]>

                    Sometimes I find I need to scream (RHCP)


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Répondre à