J'utilise la méthode std :: multimap.lower_bound pour retourner le résultat à distance. Mais dans le même contenu de conteneur, parfois j'ai la mauvaise paire d'itérateurs et ça plante mon programme. Je peux voir le contenu dans un conteneur avec Visual Studio, ils sont tous corrects. Et j'utilise la méthode find de multimap, elle a aussi bien fonctionné. Il retourne juste les damnés itérateurs invalides paire et planter mon programme, et le plus important de cela, je ne peux pas faire de test pour passer cette situation. Quel est le problème avec cette situation?J'ai un pointeur invalide de std :: multimap.lower_bound
Mon exemple des codes comme suit:
std::multimap<std::string,std::string>::iterator it = tagged_files.lower_bound("vocal");
std::multimap<std::string,std::string>::iterator it_end = tagged_files.upper_bound("vocal");
Pour la plupart, ils ont bien fonctionné. Lorsque j'imprime it
et it_end
avec% p (en utilisant printf), leurs résultats sont 8f98ab9 (une valeur de pointeur) et 0 (même clé). Quand j'ai des itérateurs invalides, les messages de débogage montrent 8f98ab9 (même valeur) et 2b8a839 (valeur étrange).
En outre, la taille de tagged_files
est toujours la même. Aucun élément n'a été inséré du tout pendant toute la session, même les itérateurs invalides sont reçus. Il s'est également avéré par printf% d avec tagged_files.size()
.
sans voir de code, il sera difficile de vous aider. essayez d'écrire un programme simple qui montre et illustre votre problème, et vous obtiendrez une bonne réponse rapidement;) – Castilho
Si vous utilisez 'std :: multimap' correctement, alors il ne retournera que des itérateurs valides. Ainsi, vous n'utilisez pas 'std :: multimap' correctement. Puisque nous ne pouvons pas voir ce que vous faites dans votre code, nous ne pouvons pas dire * ce que vous faites mal – jalf
Je mets mon code exemple, et je prouve que je ne vérifie aucun contenu dans multimap, y compris insérer ou effacer des actions. – naive231