0

我有一个用户定义类型的向量(矩阵)向量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";
                }
        }
}
4

2 回答 2

3

我认为:

it_found == it;
        ^^^^

应该:

it_found = it;
        ^^^

否则,您将取消引用不指向任何有效内容的迭代器。
此外,您可能想要使用Remove-Erase Idiom

于 2013-03-31T06:03:55.123 回答
2

您没有初始化it_found任何值,因此(*it_found)会引发错误。我想你的意思是:

it_found = it;

代替

it_found == it;
于 2013-03-31T06:07:01.643 回答