std::向量使用const_iterator终止程序

std::vector use of const_iterator terminates program

本文关键字:iterator 终止程序 const 向量 std      更新时间:2023-10-16
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;
}

距离很长。

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

您的代码本身没有任何无效内容。 显然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来自哪里以及在哪里被销毁或无效。