【问题标题】:Invalid reads, writes and frees无效的读取、写入和释放
【发布时间】:2023-04-03 16:19:01
【问题描述】:

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

如果您需要更多功能,请随时提出要求。

【问题讨论】:

标签: c valgrind


【解决方案1】:

问题中代码的错误在这里:

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

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

【讨论】:

  • 谢谢!是否有可能以某种方式将其余代码发送给您?我不能公开分享,所以...
  • 我已经放了其他功能
  • 如果您不能在此处发布它们,那么我们将无能为力。我回避了这个问题。我想我回答了你问的问题。如果您还有其他问题,请提出更多问题。
猜你喜欢
  • 1970-01-01
  • 2012-09-01
  • 2015-11-16
  • 2023-03-16
  • 1970-01-01
  • 2020-08-18
  • 1970-01-01
  • 2018-11-05
  • 1970-01-01
相关资源
最近更新 更多