std::向量使用const_iterator终止程序
std::vector use of const_iterator terminates program
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
来自哪里以及在哪里被销毁或无效。
相关文章:
- 堆栈粉碎终止程序
- 为什么我的显示功能会终止程序?
- 调用 raise(signal) 会终止 c++ 程序
- 使用终止程序的指针在数组中输入字符串
- C++ Argv[1] 终止程序,返回值 9009
- protobuf "oneof" sub-protobuf 对象指针终止程序
- 有没有办法避免在发生堆栈粉碎时终止程序
- c++ 终止程序的内存泄漏何时重要?
- C :CTRL D终止程序(Ubuntu)
- 用信号25终止程序,超过文件尺寸限制;为什么
- 是否有一种方法可以在输入负数时平均不包括负数,这是您终止程序的方式
- 正确关闭应用程序:终止程序的替代方案
- 提升线程终止程序
- Shell脚本终止程序,但导致无法写入输出文件
- 访问引用变量会终止程序
- 需要使用"enter"密钥终止程序
- C++按Enter键终止程序
- std::向量使用const_iterator终止程序
- Unicode导致关闭消息框终止程序
- 当我在函数中调用一个函数时,它会跳过代码并终止程序