Bonjour,
Je me heurte à un petit soucis avec les Iterators sur std::vector<>.
J'ai une méthode, chargée de trouver un element dans un vector, et de le supprimer du vector.
Le trouver n'est pas un soucis, mais apres la suppression, l'iterator devient invalide, et provoque un crash. (sur l'operateur ++)
Si la liste ne comporte qu'un element par exemple, le crash est systématique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 for(it = _mov1->getMeasureLineList()->begin() ; it != _mov1->getMeasureLineList()->end() ; it++) if((*it) == this) { _mov1->getMeasureLineList()->erase(it); }
Pour le moment j'évite le soucis en ajoutant un "break" apres le erase, pour quitter la boucle dans faire le it++ si risqué.
il semblerais que la méthode erase() ne prenne pas la peine de vérifier l'état de la liste et de l'itérateur et le retourne dans un état incertain...
Vous feriez/faites comment vous pour faire ça proprement et avec un maximum de sécurité ?
Merci.
Partager