list :: back()导致堆栈溢出

时间:2016-10-11 16:25:49

标签: c++ c++11 stl

我的应用程序编译时没有任何错误/警告。在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编译器测试了它。

1 个答案:

答案 0 :(得分:4)

您收到错误的确切行不是根本原因。根本问题是ProcessOption()一直在调用自己,直到你的堆栈空间不足为止。

要确认这一点,请使用调试器检查崩溃时的调用堆栈。