我有很多写,读和免费错误。我不知道哪里出错了。如果有人可以帮我解决这个问题,我将不胜感激。这是来自valgrind的日志:
http://pastebin.com/TR4Ts73Y
void deleteElement(element* node) {
element* child;
if (node == NULL)
return;
free(node->name);
if (node->text != NULL)
free(node->text);
child = node->firstChild;
while(child != NULL)
{
deleteElement(child);
child = child->nextSibling;
}
free(node);
}
如果您需要更多功能,请随时索取。
答案 0 :(得分:3)
问题代码中的错误如下:
while(child != NULL)
{
deleteElement(child); // this calls free on child
child = child->nextSibling; // OOPS, child has been freed
}
在这里你销毁child
,然后立即尝试再次使用它。你需要一个额外的变量。
while(child != NULL)
{
element* nodeToDelete = child;
child = child->nextSibling;
deleteElement(nodeToDelete);
}
您的整个程序中可能存在其他错误,但这是在您发布的代码摘录中可以检测到的明显错误。