我的应用程序编译时没有任何错误/警告。在runntime中,我在调用list :: back()函数时遇到了一个奇怪的堆栈溢出(@std :: _ Iterator_base12 :: _ Orphan_me()第193行。)
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编译器测试了它。
答案 0 :(得分:4)
您收到错误的确切行不是根本原因。根本问题是ProcessOption()
一直在调用自己,直到你的堆栈空间不足为止。
要确认这一点,请使用调试器检查崩溃时的调用堆栈。