关于指针的未知错误,segmentation fault
用栈实现了一个符号配对检测的算法
程序代码:/**
*check if the following punctuations are balanced:
*(),[],{}
*/
#include<stdio.h>
#define MAX 50
int isMatch(char c1,char c2){
return (c1=='('&&c2==')')||
(c1=='['&&c2==']')||
(c1=='{'&&c2=='}');
}
int isBalance(char* str){
int i=0;
char stack[MAX];
int top=-1;
while(str[i]!='\0'){
if(str[i]=='('||str[i]=='['||str[i]=='{'){
stack[++top]=str[i];
}else if(str[i]==')'||str[i]==']'||str[i]=='}'){
if(top==-1){
return -1; //ERROR
}else if(!isMatch(stack[top--],str[i])){
return -1;
}
}
++i;
}
return top==-1?0:-1;
}
int main(){
char* str=NULL;
scanf("%s",str); //用以上两句读入的字符串,程序不能正确运行,显示:segmentation fault
//若改为使用确定的值,如char* str="(1+2)",程序正确运行
printf("is balanced?: %d\n",isBalance(str));
return 0;
}问题是,在main函数中char* str=NULL;
scanf("%s",str);
用以上两句读入的字符串,程序不能正确运行,显示:segmentation fault若改为使用确定的值,如char* str="(1+2)",程序正确运行






