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