В приведенном ниже коде выдается сообщение об ошибке использования кучи после освобождения.
#include <iostream>
int main()
{
unordered_map<int, vector<int>::iterator> mp;
vector<int> num;
auto insert = [&](int n)
{
if (mp.count(n) != 0)
return false;
num.push_back(n);
mp[n] = prev(num.end());
return true;
};
insert(1);
insert(2);
insert(3);
for (auto n : num)
cout << n << endl;
cout << endl;
for (auto m : mp)
{
cout << m.first << " -> ";
cout << distance(num.begin(), m.second) << endl;
// cout << *m.second << endl;
}
return 0;
}
Вывод приведенного выше кода:
1
2
3
3 -> 2
1 -> -16
2 -> -7
Очевидно, что происходит сбой при попытке доступа *m.second
.Почему значения итератора кажутся здесь испорченными?
Я попытался заменить вектор списком, и приведенный выше код работает нормально.Интересно, это как-то связано с расширением вектора на "push_back"?Я пробовал другие способы получить итератор до последнего элемента вектора с безразличными результатами.