EXC_BAD_ACCESS当使用vector迭代器时

EXC_BAD_ACCESS when using vector iterators?

本文关键字:vector 迭代器 BAD ACCESS EXC      更新时间:2023-10-16

我有一个用户定义类型的向量的向量(矩阵),my_type,它是一个结构体,包含整数a, b和c。我希望定义一个函数,该函数通过b的值找到该矩阵的一个元素并删除该元素。由于函数不知道c的值,我定义了一个迭代器it来首先找到这个元素,然后将它的指针地址设置为迭代器it_found,以便它可以在erase()方法中使用。然而,当使用it_found时,程序产生了一个错误,Program received signal EXC_BAD_ACCESS, Could not access memory,。是什么导致了这个错误?

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";
                }
        }
}

我想:

it_found == it;
        ^^^^
应:

it_found = it;
        ^^^

否则就是对一个不指向任何有效对象的迭代器解引用。
此外,您可能希望使用Remove-Erase习语.

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

it_found = it;

代替

it_found == it;