Valgrind即使在我释放它之后也会发现内存泄漏

时间:2018-02-12 21:17:48

标签: c memory-management memory-leaks valgrind

在我的程序中,我在链表中​​声明了一些节点:

newSymbol->symbol.name = name;

我使用strdup,因为直接将符号名称分配给参数:

free((void*)node->symbol.name);//free the memory allocated by strdup
free((void*)node);//here I free the node itself

说丢弃传递的param的const属性时出错。

问题 :我读到了另一个堆栈溢出,你需要释放strdup创建的内存。我的程序退出时,我为每个节点执行以下操作:

8 bytes in 1 blocks are definetely lost in loss record 1 of 1
    at 0x4C2DB6B: malloc (vg_replace_malloc.c:299)
    by 0x4ECE489: strdup (in /usr/lib64/libc-2.25.so)
    by 0x400EE7: symbol_add (symbol.c:117)

我设法清除所有泄漏问题,除了一个:

{{1}}

我检查了symbol.c的第117行,确定它使用了strdup,就像我上面粘贴的那样。我不确定如何清除与此相关的内存,所以我不会有任何内存泄漏。请帮忙!非常感谢。

1 个答案:

答案 0 :(得分:0)

因为代码片段似乎是正确的,所以基本假设应该是你已经分配了指针的strdup

解决这个问题,我想补充一下:

/* free memory if it is already allocated */
if ( newSymbol->symbol.name ) 
    free( newSymbol->symbol.name);
newSymbol->symbol.name = strdup(name); //name is a (const) char* that is a parameter to function I'm in.
newSymbol->symbol.addr = addr;

虽然提及即使它解决了这个问题也很重要,但我建议继续调试你的代码,因为它似乎并没有真正正确地释放内存

希望有所帮助...