2013-03-31 69 views
0

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

假设G ++,你应该尝试的选项'-Wall -Wextra -Werror'编译。如果MSVC,有可比较的标志。但是,编译器*可能*已经警告你说该声明不起作用。我不确定它会有什么,但依然是一个很好的做法。 –

回答

3

我想:

it_found == it; 
     ^^^^ 

应该是:

it_found = it; 
     ^^^ 

否则,你解引用一个迭代器不指向任何有效的。
另外,您可能需要使用Remove-Erase Idiom

+0

哇。深夜。谢谢! – Pippi

2

您并未将it_found初始化为任何值,因此(*it_found)正在引发错误。我想你的意思是:

it_found = it; 

,而不是

it_found == it;