Hi Akim

many thanks for your answer.

On Sun, Aug 30, 2020 at 03:43:54PM +0200, Akim Demaille wrote:
> Hi Ervin,
> 
> > Le 30 août 2020 à 11:44, Ervin Hegedüs <airw...@gmail.com> a écrit :
> > 
> > How can I avoid this situation? Is that any "best-practice"? How
> > can I access to pointers in stack to free them when error
> > occurred?
> 
> I have not read all in details, but I believe you need to read
> about %destructor.
> 
> https://www.gnu.org/software/bison/manual/html_node/Destructor-Decl.html

looks like that's what I need - but for some reason that didn't
triggered in any case of error.

I just put:

%destructor { printf("free() called\n"); free ($$); } <*>

but it never called, and valgrind still shows that the block is
still reachable.

Btw I reviewed the generated code, but I'm afriad this destructor
called only when the parser run into the error state.

Now I thought what happens if the scanner found an unrecognized
token after the previous was pushed into stack - that item is
sill at there. So I'm still curious, how can I clear the whole
stack.


Thanks again,


a.
 

Reply via email to