【问题标题】:segmentation fault for vector iterator矢量迭代器的分段错误
【发布时间】:2015-02-05 10:28:59
【问题描述】:

为什么当我尝试输出值时这段代码会产生分段错误?
由于线路

cout

导致分段错误
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;

     }
 }

【问题讨论】:

  • rit_i 是使用默认构造函数创建的,因此在执行 --rit_i 之后取消引用它可能不会满足您的要求。
  • @JordiVermeulen 感谢您的回复..但我不明白您说的是什么。请您显示我需要做的更正。
  • 我不知道你的代码应该做什么,所以我无法更正它。但关键是rit_i 变量是使用默认构造函数初始化的。因此,您有一个不绑定到任何容器的迭代器。在这样的迭代器上执行--rit_i 是未定义的。
  • @JordiVermeulen 感谢您的帮助..
  • @Michael 这不是反向迭代器,是吗?只是向量末尾的普通迭代器。

标签: c++ vector stl segmentation-fault const-iterator


【解决方案1】:

在此声明中:

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

只有initialvec.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();

或类似的东西。

【讨论】:

    猜你喜欢
    • 2011-08-11
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    相关资源
    最近更新 更多