相关疑难解决方法(0)

在哪里可以释放Bison/Flex中的内存?

我或多或少地使用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),否则,野牛不会意识到这个值(如果我理解正确,我试过它不起作用).我真的不知道如何消除这个泄漏的问题.

c++ memory-management bison strdup flex-lexer

4
推荐指数
2
解决办法
3333
查看次数

标签 统计

bison ×1

c++ ×1

flex-lexer ×1

memory-management ×1

strdup ×1