std :: vector使用const_iterator终止程序

时间:2012-03-16 12:00:36

标签: c++ stl vector iterator

Distance distance(const vector<long> &x, const vector <short> &y)
{
    Distance total = 0.0;
    Distance diff;

    vector <long >::const_iterator cpx=x.begin(); //terminates at this line

    vector <short>::const_iterator cpy=y.begin();
    vector <long>::const_iterator cpx_end=x.end();
    for(;cpx!=cpx_end;++cpx,++cpy){
        diff = *cpx - *cpy;
        total += (diff * diff);
    }
    return total;
}

距离很长。

当我尝试使用向量的开头分配const迭代器时,我的代码终止了吗? 为什么会这样? 向量初始化为零。

1 个答案:

答案 0 :(得分:1)

您的代码本身没有任何效果。显然x向量在你调用distance之前被某种程度上损坏了,要么它的生命周期结束了,要么你已经有了内存或其他UB。例如。这样的事情:


vector<long> &getData()
{
  vector<long> data;
  // fill data
  return data;
}

// ...

distance(getData(), y);


vector<long> *data = new vector<long>();
// fill data

delete data;

distance(*data, y);


long data[n] = ...;
vector<long> x(n);
memcpy(&x, data, sizeof(data) / sizeof(data[0]));


vector<long> *data = 0;

distance(*data, y);

还有更多其他案例,无论如何,解决方案是检查x来自哪里以及它被销毁或变为无效的地方。