Thomas,
Actually you need to have CFG_END() at the end of your cfg_opt_t declaration. That's how the cfg_init knows that it's at the end of the opts[] array. See if that helps the memory leak that you're encountering.
Keith
On Fri, Sep 26, 2008 at 2:20 AM, Thomas Stalder
<address@hidden> wrote:
Hello,
I have made a simple application who use libconfuse (2.6) test.c:
##########################################
#include <confuse.h>
unsigned int test;
cfg_opt_t opts[] = {
CFG_SIMPLE_INT("test", &test)
};
cfg_t * cfg;
int main(void)
{
int err;
cfg = cfg_init(opts, 0);
err = cfg_parse(cfg, "test.conf");
if (err==CFG_FILE_ERROR)
printf("Error\n");
if (err==CFG_PARSE_ERROR)
printf("Parse Error");
cfg_free(cfg);
return 0;
}
##########################################
I compile test.c
gcc test.c -lconfuse
I installed valgrind (http://valgrind.org/)
When I launch my test application with valgrind :
valgrind --leak-check=full --show-reachable=yes a.out
I have this result :
##########################################
==1512== Memcheck, a memory error detector.
==1512== Copyright (C) 2002-2007, and GNU GPL'd, by Julian Seward et al.
==1512== Using LibVEX rev 1854, a library for dynamic binary translation.
==1512== Copyright (C) 2004-2007, and GNU GPL'd, by OpenWorks LLP.
==1512== Using valgrind-3.3.1, a dynamic binary instrumentation framework.
==1512== Copyright (C) 2000-2007, and GNU GPL'd, by Julian Seward et al.
==1512== For more details, rerun with: -v
==1512==
==1512==
==1512== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 15 from 1)
==1512== malloc/free: in use at exit: 4 bytes in 1 blocks.
==1512== malloc/free: 10 allocs, 9 frees, 17,002 bytes allocated.
==1512== For counts of detected errors, rerun with: -v
==1512== searching for pointers to 1 not-freed blocks.
==1512== checked 58,796 bytes.
==1512==
==1512== 4 bytes in 1 blocks are still reachable in loss record 1 of 1
==1512== at 0x4022649: malloc (vg_replace_malloc.c:207)
==1512== by 0x403676B: cfg_yyalloc (lexer.c:2184)
==1512== by 0x40367FE: cfg_yyensure_buffer_stack (lexer.c:1887)
==1512== by 0x40368DC: cfg_yy_switch_to_buffer (lexer.c:1682)
==1512== by 0x4036D5B: cfg_scan_fp_begin (lexer.l:354)
==1512== by 0x4035481: cfg_parse_fp (confuse.c:1050)
==1512== by 0x4035551: cfg_parse (confuse.c:1070)
==1512== by 0x8048532: main (in /root/a.out)
==1512==
==1512== LEAK SUMMARY:
==1512== definitely lost: 0 bytes in 0 blocks.
==1512== possibly lost: 0 bytes in 0 blocks.
==1512== still reachable: 4 bytes in 1 blocks.
==1512== suppressed: 0 bytes in 0 blocks.
##########################################
libconfuse seems to not free a pointer allocated by cfg_yyalloc.
Best regards,
Thomas Stalder
_______________________________________________
Confuse-devel mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/confuse-devel