曹嗲嗲今天敲代码了嘛 2021-12-03 20:59 采纳率: 66.7%
浏览 30
已结题

括号匹配的检验问题 Thread 1: EXC_BAD_ACCESS (code=1, address=0x18)停在pS->pTop->pNext=NULL 这一行

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

typedef struct Node{
int data;
struct Node * pNext;
}NODE,*PNODE;

typedef struct Stack{
PNODE pTop;
PNODE pBottom;
}STACK,*PSTACK;

void Ini(PSTACK);
void Push(PSTACK,char);
bool is_empty(PSTACK);
bool matching_progress(char*);
bool Pop(PSTACK,char*);

int main() {
char str[100];
//scanf("%s",str);
gets(str);
/* if(str[0]==')'||str[0]==']'||str[0]=='}'){
printf("括号不匹配");
}*/
if(matching_progress(str))
printf("right");
else printf("wrong");
return 0;
}

void Ini(PSTACK pS){
pS->pTop=(PNODE)sizeof(NODE);
if(pS->pTop==NULL) {printf("动态分配内存失败");exit(-1);}
pS->pBottom=pS->pTop;
pS->pTop->pNext=NULL;
}
void Push(PSTACK pS,char val){
PNODE pNew=(PNODE)malloc(sizeof(NODE));
pNew->data=val;
pNew->pNext=pS->pTop;
pS->pTop=pNew;
}
bool is_empty(PSTACK pS){
if(pS->pTop==pS->pBottom) return true;
else return false;
}

bool Pop(PSTACK pS,char*pVal){
if(is_empty(pS)){
return false;
}
else {
PNODE r=pS->pTop;
*pVal=r->data;
pS->pTop=r->pNext;
free(r);
r=NULL;
return true;
}
}
bool matching_progress(char *abc){
STACK S;
Ini(&S);

char b;
int i;
for(i=0;i<strlen(abc);i++){
    switch(abc[i]){
        case'{':
        case'[':
        case'(':
            Push(&S, abc[i]);
            break;
            
        case'}':
        
            if(is_empty(&S)) return false;
            else{
                Pop(&S, &b);
                if(b!='{') return false;
                break;
            }
            
        case']':
        
            if(is_empty(&S)) return false;
            else{
                Pop(&S, &b);
                if(b!='[') return false;
                break;
            
            }
        case')':
        
            if(is_empty(&S)) return false;
            else{
                Pop(&S, &b);
                if(b!='(') return false;
                break;
            
            }
        default:break;
            
    }

}
if(is_empty(&S)==0) return false;
else return true;
}

  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-12-03 21:27
    关注

    pS->pTop=(PNODE)sizeof(NODE);
    改为
    pS->pTop=(PNODE)malloc(sizeof(NODE));

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月13日
  • 已采纳回答 12月5日
  • 创建了问题 12月3日

悬赏问题

  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000
  • ¥30 ppOCRLabel导出识别结果失败
  • ¥15 Centos7 / PETGEM
  • ¥15 csmar数据进行spss描述性统计分析
  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗