次のコードを実行すると、「find()」呼び出しで segfault が発生します。
#include <vector>
#include <unordered_map>
struct item {
std::unordered_map<int,int> map;
};
int main(int argc, char** argv) {
std::vector<item> stack;
stack.emplace_back();
std::unordered_map<int,int>& topmap=stack.back().map;
stack.emplace_back();
auto ind=topmap.find(5);
if(ind!=topmap.end()) {
printf("Found element five in second to top item\n");
}
}
(-std=c++11 でコンパイル)
ただし、2 番目の emplace_back() 呼び出しが削除された場合、segfault は発生しません。
どうしてこれなの?参照変数を間違って使用していますか? 別の要素をスタックに追加するとトップマップが無効になりますか?