정의한 mknode 함수를 호출하면서 YYSTYPE 구조체 노드 1 *
퍼센트 토큰 INT 플로트 CHAR DOUBLE VOID세그먼트 오류 (코어 덤프) 오류
시작 : 선언 기능 Declaration1 {$$ = mknode ($ 1, $ 2, $ 3 NULL, 0);}
|Declaration Function {$$=mknode($1,$2,NULL,NULL,0);}
| Declaration {$$ =mknode($1,NULL,NULL,NULL,0); }
| Function {$$ =mknode($1,NULL,NULL,NULL,0); }
;
Declaration1 :Function {$$ =mknode($1,NULL,NULL,NULL,NULL); }
;
Function:
Type ID '(' ArgListOpt ')' CompoundStmt {$$ = mknode($1,$2,$4,$6,NULL); }
;
유형 : INT {$$ = mknode (NULL, NULL, NULL, NULL, "INT"); }
| FLOAT {$$ = mknode (NULL, NULL, NULL, NULL, "FLOAT"); }
| CHAR {$$ = mknode (NULL, NULL, NULL, NULL, "CHAR"); }
| DOUBLE {$$ = mknode (NULL, NULL, NULL, NULL, "DOUBLE"); }
| VOID {$$ = mknode (NULL, NULL, NULL, NULL, "VOID"); }
;
CompoundStmt: '{' StmtList '}' {$$ =$2; }
;
StmtList: StmtList Stmt {$$ = mknode($1,$2,NULL,NULL,NULL); }
| {$$=mknode(NULL,NULL,NULL,NULL,NULL);}
;
when i am running this on the input
int mian()
{}
it is giving segementation fault at
char* newnode =(char*)malloc(strlen(token));
node1 *mknode(node1 *left1, node1 *left2, node1* left3,node1* left4,char *token)
{
/* malloc the node */
node1 *newnode = (node1 *)malloc(sizeof(node1));
char *newstr = (char *)malloc(strlen(token));
strcpy(newstr, token);
newnode->left1 = left1;
newnode->left2 = left2;
newnode->left3 = left3;
newnode->left4 = left4;
newnode->token = newstr;
return(newnode);
}
여기에 오류가 있습니까?
char *newstr = (char *)malloc(strlen(token));
strcpy(newstr, token);
token
경우 다음 NULL
모두 strlen
및 strcpy
거의 확실 충돌입니다 : 당신이 정말로 그것을 찾기 위해 디버거에서 프로그램을 실행해야하지만 PLZ
나는 여전히 작동하지 않는 NULL로 o를 대체했습니다. – user123
@swati ... 토큰에 무엇을 넣고 있습니까 ??? 토큰 값을 편집하십시오. – someone
@Krishna 분할 토폴로지를 제거한 후 – user123