std :: multimap.lower_boundメソッドを使用して、範囲の結果を返します。しかし、同じコンテナのコンテンツで、間違ったイテレータペアを取得し、プログラムがクラッシュすることがあります。Visual Studioを使用してコンテナー内のコンテンツを表示できますが、すべて正しいです。そして私はmultimapのfindメソッドを使用します、それもうまくいきました。いまいましい無効なイテレータペアを返し、プログラムをクラッシュさせるだけです。その中で最も重要なのは、その状況をスキップするためのテストを実行できないことです。この状況の何が問題になっていますか?
私の例のコードは次のとおりです。
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");
ほとんどの場合、それらはうまく機能しました。印刷it
しit_end
て%p(printfを使用)を使用すると、結果は8f98ab9(1つのポインター値)と0(同じキー)になります。無効なイテレータを取得すると、デバッグメッセージに8f98ab9(同じ値)と2b8a839(奇妙な値)が表示されます。
その上、のサイズtagged_files
は常に同じです。無効なイテレータを受け取っても、セッション全体でアイテムはまったく挿入されませんでした。また、printf%dと。で証明されましたtagged_files.size()
。