неверная контрольная сумма для освобожденного объекта - объект был, вероятно, изменен после освобождения - PullRequest
0 голосов
/ 24 октября 2018

Я надеялся, что возвращаемые значения в c ++ 11 уже перемещены или оптимизированы, как описано здесь: c ++ 11 Оптимизация или перемещение возвращаемых значений?
Однако у меня возникло это исключениениже. "логический вывод (4160,0x7fffb832e380) malloc: ошибка для объекта 0x7fc415f00a10: неверная контрольная сумма для освобожденного объекта - объект, вероятно, был изменен после освобождения. установил точку отладки в malloc_error_break для отладки«.
Код:

vector<double> sp_peaks = dsp.diff(zero_sp_cropped);
sp_peaks = dsp.sign(sp_peaks);
sp_peaks = dsp.diff(sp_peaks);

В третьей строке выдается ошибка.
Методы sign и diff приведены ниже.

vector<double> SignalProcessing::diff(vector<double> &signal) {
    /*
     * Performs the diff filter on the input signal and returns the value.
     * The returned signal has length 1 less than the input signal.
     * */

    vector<double> res(signal.size()-1); // -1 because the first one cannot have a diff

    for (int i = 1; i < signal.size(); ++i) {
        res[i] = signal[i]-signal[i-1];
    }
    return res;
}

vector<double> SignalProcessing::sign(vector<double> &signal) {
    /*
     * Maps the input signal into a signal of {-1.0,1.0} values by their sign values.
     * Positive values will be mapped to 1.0 while negative will be mapped to -1.0
     * */
    vector<double> res(signal.size());

    for (int i = 0; i < signal.size(); ++i) {
        if (signal[i] > 0)
            res[i] = 1.0;
        else
            res[i] = -1.0;
    }
    return res;
}

Ошибка исчезает, если я устанавливаю точку останова и отлаживаю.Не могли бы вы объяснить, почему это происходит, и какова хорошая практика возврата стандартного контейнера?
Заранее спасибо!
Анил

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