Bonjour tout le monde!
J'utilise un std::set pour contenir des pointeurs d'objets. J'ai défini un comparateur pour le type d'objet que je stocke.
A certains endroits de mon programme, j'ai besoin de mettre à jour/ou ajouter un objet.
Pour cela, je cherche l'objet dans ma liste avec la méthode find(mon_pointeur_d_objet) de la classe set puis je teste si le pointeur est nul ou non. S'il est nul alors j'ajoute l'objet sinon je le mets à jour.
Seulement voilà: la première recherche se passe correctement à savoir la méthode find me retourne un pointeur NULL par contre au deuxième passage, le pointeur retourné est 0x1. Ceci me retourne une erreur de segmentation.
J'ai vérifié avec le debuger (gdb) et find retourne un pointeur non correct (je devrait avoir un pointeur null).
Plus troublant, quand je fais count(mon_pointeur_d_objet) j'obtiens bien 0...
Voici à quoi ressemble mon code:
Je voulais savoir pourquoi est-ce que j'ai ce comportement? Est-ce normal? Est-ce que ça vous ai déjà arrivé?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 if (mon_pointeur_d_objet != NULL) { MonObjet* ptr = *(m_monSet.find(mon_pointeur_d_objet)); //retourne un pointeur à l'adresse 0x1 if (ptr != NULL) { //modification } else { m_monSet.insert(mon_pointeur_d_objet); } }
Merci d'avance
EDIT:
C'est bon j'ai trouvé. Il fallait plutôt faire un test sur le const_iterator pour savoir s'il c'est le dernier ou non.
Partager