2014-12-07 99 views
-6

为什么当我尝试输出值时,此代码产生分段错误?
由于线路导致分段故障

cout < < * rit_j;向量迭代器的分段错误

void chef(vector<int>vec) 
{ 
    int count=0; 
    vector<int>::iterator bit = vec.begin(); 
    vector<int>::iterator eit=vec.end(); 
    if(*bit != *eit) 
    { 
     sort(bit,eit);   
     vector<int>::iterator rit_i,rit_j,initial = vec.end(); 
     --rit_i;--rit_j;--initial; 
     cout << *rit_i; 

    } 
} 
+0

'rit_i'是使用默认构造函数创建的,因此在执行'--rit_i'后取消引用它可能不会达到您想要的效果。 – 2014-12-07 19:07:48

+0

@JordiVermeulen谢谢你的回复..但我不明白你的意思。可以请你出示我需要改正的问题。 – Pradeep 2014-12-07 19:09:56

+0

我不知道你的代码应该做什么,所以我不能纠正它。但问题是'rit_i'变量是用默认的构造函数初始化的。因此,您有一个不绑定到任何容器的迭代器。在这样的迭代器上执行'--rit_i'是未定义的。 – 2014-12-07 19:15:06

回答

3

在此声明:

vector<int>::iterator rit_i,rit_j,initial = vec.end(); 

initial被初始化为vec.end()。让它做什么,我想你想到,你必须写

vector<int>::iterator rit_i = vec.end(), rit_j = vec.end(), initial = vec.end(); 

vector<int>::iterator rit_i,rit_j,initial; 
rit_i = rit_j = initial = vec.end(); 

或诸如此类的话。