C++ 将对bool的引用设置为stack.top等于boolean堆栈,会引发错误的访问错误。Can';我不明白为什么';发生什么事了

C++ 将对bool的引用设置为stack.top等于boolean堆栈,会引发错误的访问错误。Can';我不明白为什么';发生什么事了,c++,stack,boolean,data-management,C++,Stack,Boolean,Data Management,以下代码位于函数中,结果是对布尔值的引用 trueValues和false值是导致true或false语句的字符集 stack<bool> operandStack; for (int k = 0; k < postfix.size(); k++) { char ch = postfix[k]; if (ch != '!' && ch != '&' && ch != '|') { if (trueV

以下代码位于函数中,结果是对布尔值的引用

trueValues和false值是导致true或false语句的字符集

stack<bool> operandStack;
for (int k = 0; k < postfix.size(); k++)
{
    char ch = postfix[k];
    if (ch != '!' && ch != '&' && ch != '|')
    {
        if (trueValues.contains(ch))
        {
            operandStack.push(true);
        }
        if (falseValues.contains(ch))
        {
            operandStack.push(false);
        }
    }
    else if (ch == '!' || ch == '&' || ch == '|')
    {
        bool operand2 = operandStack.top();
        operandStack.pop();
        bool operand1 = operandStack.top();
        operandStack.pop();
        switch(ch)
        {
            case '!':
                operandStack.push(operand1 != operand2);
            case '&':
                operandStack.push(operand1 && operand2);
            case '|':
                operandStack.push(operand1 || operand2);
        }
    }
}
result = operandStack.top();
栈操作数栈;
对于(int k=0;k
注释掉
result=
行将删除错误消息

首先,我看到你的“if(ch==”!“| | ch==”&“| | ch==”|”)没有任何意义。他们没有别的可能

另外,如果“postfix”是std::string,我很确定size包含一个终止的空字符。所以它可能是想在那里放点东西

第三,如果这整件事都在一个函数内部,并且您正在按照您的建议返回一个引用(我没有看到实际的函数原型),那么您正在尝试返回一个对即将被销毁的局部堆栈变量的引用


而且,正如Spinkoo所指出的,你的开关也没有断开

我知道出了什么问题。与此处提供的代码无关。我在设置输入函数的字符串的格式时出错。很抱歉,谢谢大家的帮助。

如果堆栈为空,它将崩溃,并且有时会发生这种情况。您可以显示trueValues和falseValues初始化吗?对于我现在正在处理的测试用例,我已确保堆栈不是空的。trueValues和falseValues是双链接列表。我检查字符串中的字母是否在这两个集合中,并将true或false推到操作数堆栈上。@AshBal是缺少的
break语句,并且您真的希望在传输到特定的
案例
值标签后,完成并执行所有语句吗?