如何正确将shared_pointer传递给构造函数?

时间:2019-02-02 16:25:20

标签: c++ pointers memory

我的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;
}

1 个答案:

答案 0 :(得分:1)

可能的原因是您超出了向量的范围。

您之后创建过在环std::ceil(stop-(start/step))与元素(stop - start) / step的元素的数目(额外添加到突出算符优先括号)的载体,但循环。