C++ 从n元树中删除动态数组节点时断言错误
我在销毁树时遇到了删除节点的问题。每个节点都是我的树类中定义的结构:C++ 从n元树中删除动态数组节点时断言错误,c++,recursion,memory-leaks,tree,dynamic-arrays,C++,Recursion,Memory Leaks,Tree,Dynamic Arrays,我在销毁树时遇到了删除节点的问题。每个节点都是我的树类中定义的结构: struct node { Skill skill; node** child; node(const Skill& aSkill): skill(aSkill) { child = new node*[CHILD_LIMIT]; // Memory leak happens here for(int i = 0; i < CHILD
struct node
{
Skill skill;
node** child;
node(const Skill& aSkill): skill(aSkill)
{
child = new node*[CHILD_LIMIT]; // Memory leak happens here
for(int i = 0; i < CHILD_LIMIT; i++)
child[i] = NULL;
}
};
而不是
delete root;
但这会导致调试断言失败消息,其表达式为:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)。我做错了什么?我看到了大量关于从n元树中删除的信息,以及大量关于删除指针数组的信息,但奇怪的是,我很难找到这两者结合的帮助
提前谢谢 您的数组称为child,因此在实际删除节点之前,需要在此基础上调用array delete
void Tree::DestroyTree(node*& root)
{
if(root)
{
for(int i = 0; i < CHILD_LIMIT; i++)
DestroyTree(root->child[i]);
delete [] root->child;
delete root;
root = NULL;
}
}
void Tree::DestroyTree(节点*&根)
{
如果(根)
{
对于(int i=0;i子[i]);
删除[]根->子目录;
删除根;
root=NULL;
}
}
啊!这是有道理的,并解决了断言问题。但是,在同一点上,我仍然存在内存泄漏。@Zeo您的问题很可能与我们看不到的代码有关。你能把节点放在哪里的代码贴出来吗?你是对的!我发现了问题:在声明新节点之前,我没有正确捕获一些错误数据。我把你的回答作为答案。谢谢
delete root;
void Tree::DestroyTree(node*& root)
{
if(root)
{
for(int i = 0; i < CHILD_LIMIT; i++)
DestroyTree(root->child[i]);
delete [] root->child;
delete root;
root = NULL;
}
}