读取,写入和释放无效

时间:2013-03-30 09:10:07

标签: c valgrind

我有很多写,读和免费错误。我不知道哪里出错了。如果有人可以帮我解决这个问题,我将不胜感激。这是来自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);
}

如果您需要更多功能,请随时索取。

1 个答案:

答案 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);
}

您的整个程序中可能存在其他错误,但这是在您发布的代码摘录中可以检测到的明显错误。