Re: C++ parser: segmentation fault using parsing a file twice

Luigi Malagò <[email protected]> Sun, 07 Jan 2007 03:00:10 +0000
Newsgroups gmane.comp.lex.flex.general
Message-ID <[email protected]>
> hello to everybody,
> i'm new to flex bison and i'm experiencing a strange problem. I have 
> wirtten a C++ parser using
> flex 2.5.33-r1 and bison 2.2. I have to parse two different files, with 
> the same structure, so i decide to use the same parser twice.
> The problem is that when i parse one file OR the other everything is ok, 
> but when i parse both (no matter the order) or when i
> parse one of the two twice, i get a segmentation fault. Using gdm i 
> isolated the following code:
>
>   
>> void assoc_parser(brianBehaviors *bb) {
>>     assocparser_linenumber = 2;
>>     // sl = new assoc_list();
>>     // s = new assoc();   
>>     assoc_init();
>>     //assocdebug=1;
>>     assoc_bbehavior = bb;
>>    
>>     assoc_v = new variable();
>>     printf("ready to parse...\n");
>>     assocparse();
>>     printf("...parsing done\n");
>>     delete assoc_v;
>>
>>     assoc_cancel_memory_leaks();
>> }
>>     
I just solved the problem. The function  assoc_cancel_memory_leaks() 
created the problem. I moved its invocation into the destructor of the 
parser,
to invoke it ony once at the end. Here is its implementation:

void assoc_cancel_memory_leaks()
{
  /* For non-reentrant C scanner only. */
  assoc_delete_buffer(YY_CURRENT_BUFFER);
  yy_init = 1;
}


Thanks a lot,
Luigi
 
 
 --
 Email.it, the professional e-mail, gratis per te: http://www.email.it/f
 
 Sponsor:
 Refill s.r.l. - Tutto per la tua stampante a prezzi incredibili: su cartucce, toner, inchiostri, carta speciale risparmi fino al 90%!
 Clicca qui: http://adv.email.it/cgi-bin/foclick.cgi?mid=5189&d=7-1