-
Notifications
You must be signed in to change notification settings - Fork 173
Closed
Description
BNFC version 2.9.1
Here is the code generated by BNFC
/* Entrypoint: parse Proc from string. */
Proc psProc(const char *str)
{
YY_BUFFER_STATE buf;
mylang__init_lexer(0);
buf = mylang__scan_string(str);
int result = yyparse();
mylang__delete_buffer(buf);
if (result)
{ /* Failure */
return 0;
}
else
{ /* Success */
return YY_RESULT_Proc_;
}
}
I successfully call this method, and then called free()
on the returned pointer.
but valgrind says there is 16KB memory leaked.
Error Leaked 16.1 kiB
Info at malloc
at mylang_alloc (Lexer.c:2509)
at mylang__create_buffer (Lexer.c:2047)
at mylang_restart (Lexer.c:1987)
at mylang__init_lexer (mylang.l:124)
at psProc (mylang.y:197)
at rho_runtime::interpreter::compiler::builder::build_ast (src/interpreter/compiler/builder.rs:15)
at rho_runtime::interpreter::compiler::test (src/interpreter/compiler/mod.rs:22)
at rho_runtime::main (src/main.rs:10)
at core::ops::function::FnOnce::call_once (function.rs:227)
at std::sys_common::backtrace::__rust_begin_short_backtrace (backtrace.rs:125)
at std::rt::lang_start::{{closure}} (rt.rs:66)
Summary Leaked 16.1 kiB total
The leak is from mylang__create_buffer
(yy_create_buffer
) line 2047 below.
/** Allocate and initialize an input buffer state.
* @param file A readable stream.
* @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
*
* @return the allocated buffer state.
*/
YY_BUFFER_STATE yy_create_buffer (FILE * file, int size )
{
YY_BUFFER_STATE b;
b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); // <--- this line leaks
if ( ! b )
YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
b->yy_buf_size = size;
b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) );
if ( ! b->yy_ch_buf )
YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
b->yy_is_our_buffer = 1;
yy_init_buffer( b, file );
return b;
}
It is strange that psProc()
did call mylang__delete_buffer
(yy_delete_buffer
) .
Is this a bug? Or I used it incorrectly?
zsluedemhangingman