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迭代器时,我的代码终止了吗? 为什么会这样? 向量初始化为零。
答案 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
来自哪里以及它被销毁或变为无效的地方。