gpt4 book ai didi

c - 如何修复这个开关功能的 "segmentation fault 11"?

转载 作者:行者123 更新时间:2023-11-30 18:44:34 25 4
gpt4 key购买 nike

我是 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 是否正在改变堆栈?如果是这样,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;
}

关于c - 如何修复这个开关功能的 "segmentation fault 11"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57681305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com