Flex/Bison错误:基本字符串::\u S\u构造null无效

Flex/Bison错误:基本字符串::\u S\u构造null无效,bison,flex-lexer,Bison,Flex Lexer,我的flex文件中有以下规则: {ID} {printf("(id, \"%s\") [%d]\n", yytext, yylineno); yylval.str = strdup(yytext); return IDENT;} 在我的野牛档案中有以下规则: identificador : IDENT {cout << "identificador : IDENT\n"; cout <&

我的flex文件中有以下规则:

{ID}        {printf("(id, \"%s\") [%d]\n", yytext, yylineno); yylval.str = strdup(yytext); return IDENT;}
在我的野牛档案中有以下规则:

identificador            : IDENT                            {cout << "identificador : IDENT\n"; cout << $1 << "\n";$$ = $1;}
what():基本\u字符串::\u S\u构造null无效

对我来说,
$1
看起来是
NULL
,但我不明白为什么。
这两个文件都非常大,因为语法非常庞大,但如果需要,我可以编辑以添加其他相关部分。

嗯,我不知道错误的确切原因,但我通过更改bison文件中的
%union
声明成功地修复了它

以前是:

%union {

     int integer;

     char character;

     char* str;

     entry* e;


 };
现在是:

%union {

     struct {

         int integer;

         char character;

         char* str;

         entry* e;

     };

 };

这是唯一返回
IDENT
flex
规则吗?是的,这是唯一一个。这将是我的下一个问题。很好,您找到了它。您的更改只会在bison堆栈上分配额外的、未使用的空间,但实际上不会更改堆栈上的值,因此很可能只是解决问题,而不是实际解决问题。这(以及最初的问题描述)让我相信您存在内存损坏问题(通过无效指针或数组末尾写入),因此您可以尝试类似的方法,整个程序如我所预期的那样工作。我运行Valgrind只是为了以防万一,它返回:错误摘要:0个上下文中的0个错误(已抑制:2个来自2个)
%union {

     struct {

         int integer;

         char character;

         char* str;

         entry* e;

     };

 };