gpt4 book ai didi

C "pointer being freed was not allocated"错误

转载 作者:行者123 更新时间:2023-12-02 21:27:17 25 4
gpt4 key购买 nike

我正在尝试在线找到的四叉树实现,但作为以下(精简的)_node_release 函数的一部分,间歇性地收到“正在释放的指针未分配”错误:

static void _node_release(node* node)
{
if(node->subnodes[0])
{
for(size_t i=0;i<4;i++)
{
_node_release(node->subnodes[i]);
free(node->subnodes[i]); // this causes "pointer being freed was not allocated" errors
}
}
// ...

free(node); // the node passed to _node_release is free'd here
}

我是否正确地假设 node 在这里被错误地释放了两次? _node_release 函数释放传递给它的节点,但在递归调用 _node_release 后,代码还尝试释放每个后续子节点。

最佳答案

是的,你的这个假设是正确的。

问题出在你的递归调用上。假设我是递归调用中的子节点。当我在子节点上调用 free 后,我会执行最后一行 free(node) 来释放自己。

现在我是这个节点的父节点。我也做同样的事情。然而,我的子节点之一是刚刚释放自己的人。因此,当我调用 free(node->subnodes[i]) 时,我收到了您看到的错误

关于C "pointer being freed was not allocated"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23223476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com