【发布时间】:2013-03-31 05:59:43
【问题描述】:
我有一个用户定义类型的向量(矩阵)向量,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";
}
}
}
【问题讨论】:
-
假设 g++,您应该尝试使用选项
-Wall -Wextra -Werror进行编译。如果是 MSVC,则有可比较的标志。但是,编译器可能已经警告您该语句无效。我不确定它会不会,但这仍然是一个很好的实践。
标签: c++ iterator exc-bad-access