Мое приложение компилируется без каких-либо ошибок/предупреждений. Во время выполнения я получаю странное переполнение стека при вызове функции list :: back() (@std :: _ Iterator_base12 :: _ Orphan_me() строка 193).list :: back() вызывает переполнение стека
class Stock
{
public:
bool falling = false;
list<int> peaks;
list<int> bottoms;
void ProcessOption(int value)
{
if (falling)
{
if (bottoms.empty()) {
bottoms.push_back(value);
return;
}
int& lastValue = bottoms.back(); //<- Error
if (value < lastValue) {
bottoms.pop_back();
bottoms.push_back(value);
}
else if (value > lastValue) {
falling = false;
ProcessOption(value);
}
}
else
{
if (peaks.empty()) {
peaks.push_back(value);
return;
}
int& lastValue = peaks.back(); //<- Error
if (value > lastValue) {
peaks.pop_back();
peaks.push_back(value);
}
else if (value < lastValue) {
falling = true;
ProcessOption(value);
}
}
}
};
Отладчик подтверждает, что оба списка, включая один (действительный) элемент при вызове функции. Я тестировал его с помощью современных компиляторов MSVC++ 2013 и 2015.
Я думаю, что у вас есть бесконечная рекурсия функции ProcessOption, но она разбилась в строке с back(). – Unick