我或多或少地使用Bison&Flex 1个月,所以如果我没有看到明显的东西(但我认为不是这样),我很抱歉.
我有一个关于使用Flex Bison释放内存的问题.这是我的代码的样子:
parser.l
{DATE} { yylval.str= strdup(yytext);
pair<string,string> newpair = make_pair("DATE",yytext);
myvector.push_back(newpair);
return TOKEN_DATE ;}
Run Code Online (Sandbox Code Playgroud)
这是我的.l文件的一个例子.我将yytext的值复制到yylval.str中.然后我创建一个具有该内容的新对(实际上是键/值),然后我返回bison的令牌日期.我的解析器.y不超过yyparse; 当抓到东西时,它就会打印出来.
我尝试在此运行valgrind,我有关于strdup的多个错误.我知道这个函数使用malloc,但我不知道WHERE和WHEN使用FREE.
我可能猜测它在.y文件中,但在哪里?
test:
TOKEN_DATE { cout << $1 << endl; // here ? and what to free ?}
Run Code Online (Sandbox Code Playgroud)
我真的没有得到所有这些,我真的很感激一个简单明了的解释.
提前致谢,
编辑:
我试过几件事:
test:
TOKEN_DATE TOKEN_TOTO TOKEN_BLABLA { cout << $1 << endl; free($1); free($2);}
| TOKEN_DATE test { cout << $1 << endl, free($1); }
Run Code Online (Sandbox Code Playgroud)
它似乎编译和执行良好,但valgrind仍然告诉我,strdup函数中包含的malloc存在问题.但我不能在flex文件中写自由(yylval.str),否则,野牛不会意识到这个值(如果我理解正确,我试过它不起作用).我真的不知道如何消除这个泄漏的问题.