Я надеялся, что возвращаемые значения в 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;
}
Ошибка исчезает, если я устанавливаю точку останова и отлаживаю.Не могли бы вы объяснить, почему это происходит, и какова хорошая практика возврата стандартного контейнера?
Заранее спасибо!
Анил