在我的程序中,我在链表中声明了一些节点:
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,就像我上面粘贴的那样。我不确定如何清除与此相关的内存,所以我不会有任何内存泄漏。请帮忙!非常感谢。
答案 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;
虽然提及即使它解决了这个问题也很重要,但我建议继续调试你的代码,因为它似乎并没有真正正确地释放内存
希望有所帮助...