Valgrind记忆泄漏

时间:2014-10-17 06:48:25

标签: memory-leaks valgrind lex strdup

我正在做一个小项目。我正在使用Valgrind工具检查内存泄漏。当我使用这个工具时,我得到了波纹管信息。

> 584 bytes in 74 blocks are definitely lost in loss record 103 of 104
> ==4628==    at 0x402BE68: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
> ==4628==    by 0x41CF8D0: strdup (strdup.c:43)
> ==4628==    by 0x8060B95: main (in mycall)
> 
> LEAK SUMMARY:
> ==4628==    definitely lost: 584 bytes in 74 blocks
> ==4628==    indirectly lost: 0 bytes in 0 blocks
> ==4628==      possibly lost: 0 bytes in 0 blocks
> ==4628==    still reachable: 21,414 bytes in 383 blocks
> ==4628==         suppressed: 0 bytes in 0 blocks
> ==4628== 
> ==4628== For counts of detected and suppressed errors, rerun with: -v
> ==4628== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)

这些是我使用函数strdup的编码。我用过LEX代码。

{string}    {

    yylval.string = strdup(yytext + 1);
    yylval.string[yyleng - 2] = 0;
    return PPSTRING;
    }

{numvar}        { yylval.string = strdup(yytext);return(PPNUMVAR);      }
{sysnumvar}     { yylval.string = (char *) strdup(yytext);return(PPSYSNUMVAR);  }

我不知道记忆在哪一点上被泄露了。

1 个答案:

答案 0 :(得分:2)

strdup函数分配必要的内存来隐式地存储源字符串 ,你需要手动释放返回的字符串(即代码中的yylval.string)。