Hello,

je suis en train de me mettre � �crire une biblioth�ques de classes en
C++, qui me servira ensuite pour des logiciels de jeu (principalement du
jeu de r�le).

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.

Si c'est un vector<MonType*>, impossible de vider. un pop_back() quand
size() renvoit 1 fait passer � un �tat o� size() renvoit 33635908
(2^25+81476, je trouvais que c'est �trangement ��proche�� d'une
puissance de 2),

Si c'est un deque<MonType*>, au bout de quelques secondes, la machine
plante lamentablement, impossible de passer sur une console texte ou de
tuer le serveur X. Seule possibilit�, les Magic Keys du kernel, SIUB. Et
lorsque la machine red�marre, kernel panic. Un red�marrage
suppl�mentaire et elle d�marre comme une fleur.

Si c'est un list<MonType*>, le programme segfaulte apr�s ou pendant la
suppression du dernier �l�ment.

Je recommande de lancer la version deque ainsi�:

./test & sleep 4 ; kill %+

Est-ce que quelqu'un saurait me dire ce qui se passe, ou au moins me
filer des pistes sur la fa�on de le d�couvrir�?

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�?

Probl�matiquement,
Nowhere man
-- 
[EMAIL PROTECTED]
OpenPGP 0xD9D50D8A

Attachment: dice.tar.gz
Description: Binary data

Attachment: signature.asc
Description: Digital signature

Répondre à