[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Un bug dans la STL ?



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
-- 
nowhere.man@levallois.eu.org
OpenPGP 0xD9D50D8A

Attachment: dice.tar.gz
Description: Binary data

Attachment: signature.asc
Description: Digital signature


Reply to: