Bonjour,
Alors voila mon problème : j'utilise un vecteur pour stocker des pointeurs alloués dynamiquement. Mais lorsque j'utilise les itérateurs pour détruire un à un les objets du vecteur, j'obtiens une segfault. Encore plus surprenant, en mettant quelques cout, je m'aperçois que la taille de vecteur ne fait que un, alors que le programme passe une deuxième fois dans la boucle...ça a donc l'air d'être les itérateurs qui foirent. Mon bout de code :
Avec les cout, j'obtiens comme sortie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 cout << "Taille des plugins : " << plugins.size() << endl; for(vector<plugin*>::iterator it_ = plugins.begin(); it_ != plugins.end(); ++it_) { cout << "Itération" << endl; delete *it_; plugins.erase(it_); }
Taille des plugins : 1
Itération
Itération --->> segfault (pas très surprenant...xD)
En sachant (je le répète) que mon vecteur contient des pointeurs d'objets plugins alloués dynamiquement via new, et que le vecteur plugins a été intialisé par copie.
Plus précisément, j'ai une fonction vector<plugin*> get_installed_plugins() qui créer un vecteur en local, le remplit, et renvoie son vecteur contenant les instances de la classe plugin...Je ne sais pas si ça influe...
En tout cas, je peux très bien accèder à l'élement 0 du vecteur, le manipuler et le détruire sans segfault ; le seul problème viens du fait que la vérification it_ != plugins.end() pose apparament problème...
Si quelqu'un a une idée
Merci d'avance.
[edit]Je viens de trouver la réponse tout seul...je ne savais pas que erase() invalidait l'itérateur concerné. (ouais, j'aurais peut être dût googler avant de poser, i know...)
Partager