使用向量迭代器时EXC_BAD_ACCESS?

时间:2013-03-31 05:59:44

标签: c++ iterator exc-bad-access

我有一个用户定义类型my_type的向量(矩阵)向量,它是一个结构,包含整数a,b和c。我希望定义一个函数,通过b的值找到该矩阵的元素并删除该元素。由于函数不知道c的值,我定义了一个迭代器it来首先找到这个元素,然后将它的指针地址设置为迭代器it_found,以便它可以用于擦除() 方法。但是,当使用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";
                }
        }
}

2 个答案:

答案 0 :(得分:3)

我想:

it_found == it;
        ^^^^

应该是:

it_found = it;
        ^^^

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

答案 1 :(得分:2)

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

it_found = it;

而不是

it_found == it;