проблема @property - Цель C

Проблема в том, что вы возвращаете указатели на yytext для ваших семантических значений маркера. yytext является внутренним буфером flex, используемым для соответствия токенам, и его значение действует только до следующего вызова yylex для чтения следующего токена. Таким образом, ваши семантические значения ($1 и т. Д.) В конечном итоге становятся висящими указателями в буфер, который перезаписывается с большим количеством токенов данных из более поздних токенов.

Вам нужно скопировать строку из yytext в некоторый которые будут доступны дольше. strdup очень полезен для этого:

\[[A-Za-z_]*\]                                      {yylval.val_char=strdup(yytext); return SECTION_NAME;}
[A-Z_a-z[:digit:]]*[A-Z_a-z][A-Z_a-z[:digit:]]*     {yylval.val_char=stdrup(yytext); return OPTION_NAME;}

и т. д.

1
задан Pripyat 12 October 2010 в 18:55
поделиться