繁体   English   中英

如何为此开关功能解决此“分段故障11”?

[英]How to fix this “segmentation fault 11” for this switch function?

我是c的新手,正在编写一个switch函数,只要传入的字符串是),},],当弹出的表达式不匹配开放括号时,它将返回false。 (是的,这是括号中的问题...)

我可以确定分段错误仅来自此switch语句,并且没有它,代码也可以正常工作。

我的代码是:


switch (expr[i]) 
        { 
        case ')': if (pop(&Stack) == '{' || pop(&Stack) =='[') { 
                  return 0;}
            break; 

        case '}': if (pop(&Stack) == '(' || pop(&Stack) =='[') {
                  return 0; }
            break; 

        case ']': if (pop(&Stack) == '{' || pop(&Stack) =='(') {
                  return 0; }
            break; 
        } 

它给我“细分错误:11”。

我怀疑此开关会导致段错误。 更可能是使用pop()

流行会改变堆栈吗? 如果是这样,则会在以下位置对pop进行两次评估:

 case ')':
    if (pop(&Stack) == '{'  ||  pop(&Stack) =='[')

当字符为)并且弹出的匹配值为(

要修复,请像下面这样重组这部分代码(取决于pop的交互方式):

/*
 *  Have a peek at the top of stack without disrupting content
 */
char top_of_stack = pop (&Stack);
push (&Stack, top_of_stack); // put it back

switch (expr[i]) 
{ 
case ')':
     if (top_of_stack == '{' || top_of_stack == '[')
            return 0;
     break; 

case '}':
     if (top_of_stack == '(' || top_of_stack == '[')
            return 0;
     break; 

case ']':
     if (top_of_stack == '{' || top_of_stack == '(')
            return 0;
      break; 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM