2013-05-28 42 views
0

我有我的Flex文件中的下列規則:的Flex /野牛錯誤:basic_string的:: _ S_construct空無效

{ID}  {printf("(id, \"%s\") [%d]\n", yytext, yylineno); yylval.str = strdup(yytext); return IDENT;} 

而在我的野牛文件以下規則:

identificador   : IDENT       {cout << "identificador : IDENT\n"; cout << $1 << "\n";$$ = $1;} 

當嘗試打印$1,我得到以下錯誤:

terminate called after throwing an instance of 'std::logic_error' 

什麼():basic_string的:: _ S_construc t null無效

對我來說,它看起來像$1NULL,但我不明白爲什麼。 這兩個文件都非常大,因爲語法很龐大,但如果需要,我可以編輯以添加其他相關部分。

+1

這是唯一的'flex'規則返回'IDENT'? –

+0

是的,它是唯一的一個。 – Izabela

回答

1

嗯,我不知道錯誤的確切原因,但我設法通過更改野牛文件中的%union聲明來解決它。

以前它是:

%union { 

    int integer; 

    char character; 

    char* str; 

    entry* e; 


}; 

現在是:

%union { 

    struct { 

     int integer; 

     char character; 

     char* str; 

     entry* e; 

    }; 

}; 
+0

這將是我的下一個問題。你找到了很好的工作。 –

+0

您的更改只會在野牛堆棧上分配額外的未使用空間,但實際上並不會改變堆棧中的值,所以它可能只是移動問題而不是實際修復它。這個(連同原始問題描述)使我相信你有一個內存損壞問題(通過一個無效指針寫入數組或結束數組),所以你可以嘗試類似[valgrind](http:// valgrind)。 org) –

+0

那麼,整個程序按我的預期工作。我跑Valgrind以防萬一,並返回:錯誤摘要:從0上下文中的0錯誤(壓制:2從2) – Izabela