我有一个向量(一个矩阵)的用户定义类型的向量,my_type
,它是一个结构并包含整数a,b和c。我希望定义一个函数,通过b的值找到这个矩阵的元素并删除元素。由于该函数并不知道c的值,因此我定义了一个迭代器it
以首先找到该元素,然后将其指针地址设置为迭代器it_found
,以便可以在erase()方法中使用它。但是,当使用it_found
时,程序产生了一个错误Program received signal EXC_BAD_ACCESS, Could not access memory,
。什么导致了这个错误?EXC_BAD_ACCESS何时使用矢量迭代器?
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";
}
}
}
假设G ++,你应该尝试的选项'-Wall -Wextra -Werror'编译。如果MSVC,有可比较的标志。但是,编译器*可能*已经警告你说该声明不起作用。我不确定它会有什么,但依然是一个很好的做法。 –