Hello,
I am very new to bison and flex and wonder how to clean up pointers/memory in bison properly. Whenever I copied a string to the variable yylval.str in the flex file like this: {WORD} { yylval.str = strdup( yytext ); return WORD; } I got a memory leak cause I did not delete the pointer copied by the strdup() function. Here is the output of valgrind: > valgrind --leak-check=full rules ... ... ==935== 3 bytes in 1 blocks are definitely lost in loss record 2 of 3 ==935== at 0x401B46D: malloc (vg_replace_malloc.c:149) ==935== by 0x40D1B9F: strdup (in /lib/tls/libc-2.3.6.so) ==935== by 0x8048976: yylex (in /RulezParser/flex_bison_test/rules) ==935== by 0x804990E: yyparse (in /RulezParser/flex_bison_test/rules) ==935== by 0x804A498: main (in /RulezParser/flex_bison_test/rules) ... First I tried to solve this problem with the %destructor directive in bison, which apparently did not work. Then I solved the problem in the %action section in bison like this: WORD EQUAL WORD { $$ = !strcmp( $1, $3 ); free($1); free($3); } This seems to work cause valgrind does not show any memory leak anymore. But will this work in case of an syntax error ? And another question arises: What does the %destructor do and how does it work ? Can anyone with a bit of knowledge/experience shed some ligth on this issue ? thanks, arno _______________________________________________ Help-bison@gnu.org http://lists.gnu.org/mailman/listinfo/help-bison