我的C ++代码遇到问题。 Track构造函数完成后,我得到“ SIGABRT(已中止)损坏的大小与prev_size的对比”(我认为当Ts超出范围时)。
如何在不超出范围的情况下将该向量正确传递给成员对象,而又不会引起问题?预先感谢您的帮助!
Track::Track(std::vector<double> X, std::vector<double> Y){
cumulativeLengths = {0.0};
std::shared_ptr<std::vector<double>> Ts = arange<double>(0, X.size());
xSpline = Spline(*Ts, X);
ySpline = Spline(*Ts, Y);
}
class Spline {
public:
Spline();
Spline(std::vector<double>& x, std::vector<double>& y);
std::vector<double> x;
std::vector<double> y;
};
Spline::Spline(std::vector<double>& x, std::vector<double>& y): x(x), y(y) {
updateSpline();
}
template<typename T>
std::shared_ptr<std::vector<T>> arange(T start, T stop, T step) {
std::shared_ptr<std::vector<T>> values = std::make_shared<std::vector<T>>();
values->resize(std::ceil(stop-start/step));
auto it = values->begin();
for (T value = start; value < stop; value += step)
*it = value;
it++;
return values;
}
答案 0 :(得分:1)
可能的原因是您超出了向量的范围。
您之后创建过在环std::ceil(stop-(start/step))
与元素(stop - start) / step
的元素的数目(额外添加到突出算符优先括号)的载体,但循环。