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