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]