Как правильно передать shared_pointer в конструктор? - PullRequest
0 голосов
/ 02 февраля 2019

Я столкнулся с проблемой с моим кодом 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 голосов
/ 02 февраля 2019

Причина вероятная в том, что вы выходите за границы своего вектора.

Вы создаете вектор с std::ceil(stop-(start/step)) (добавлены дополнительные скобки для выделения приоритета оператора) с количеством элементов, но потом обведите элемент (stop - start) / step в цикле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...