EXC_BAD_ACCESS при использовании векторных итераторов?

У меня есть вектор векторов (матрица) пользовательского типа, my_type, который является структурой и содержит целые числа a, b и c. Я хочу определить функцию, которая находит элемент этой матрицы по значению b и удалить элемент. Поскольку функция не знает значения c, я определил итератор it сначала найти этот элемент, а затем установить его адрес указателя на итератор it_found так что его можно использовать в методе erase (). Тем не менее, программа выдала ошибку, Program received signal EXC_BAD_ACCESS, Could not access memory, когда it_found используется. Что вызывает эту ошибку?

bool remove_V(int a, int b) {
typename std::vector<my_type>::iterator it;
typename std::vector<my_type>::iterator it_found;for(it = V.at(a).begin(); it != V.at(a).end(); ++it){
if ((*it).b ==  1) {
it_found == it;
std::cerr << (*it).b << "\n";
std::cerr << (*it_found).b << "\n";
}
}
}

0

Решение

Я думаю:

it_found == it;
^^^^

должно быть:

it_found = it;
^^^

В противном случае вы разыменовываете итератор, который не указывает на что-либо действительное.
Кроме того, вы можете использовать Удалить-стереть идиома.

3

Другие решения

Вы не инициализируете it_found поэтому к любой стоимости (*it_found) выдает ошибку. Я думаю, что вы имели в виду:

it_found = it;

вместо

it_found == it;
2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector