为什么我无法删除生成的树?

时间:2016-04-01 00:23:28

标签: c++ tree

我正在实现用于c ++数据聚合的星形算法(我是c ++的新手)。在这个算法中我们有大数据。在第一步中,我们使用所有数据构建基础树,然后基于基础树我们应该构建其他树,命名为星树,在每个星树完成后,输出其值,并且应该销毁星树。我做了所有这个过程,我的算法工作,但它的内存使用非常多,似乎这些星树没有被破坏。以下是我认为对此问题有用的代码的一部分:

对于我打算销毁的每棵树,我将它的根传递给destroyTree(node * root)方法:

void Cagg::destroyTree(node* root){
   int size = root->child.size();
   for (int i = 0; i < size; i++){
        destroyTree(root->child[i]);
    }
   delete root;
   root = NULL;

}

调试时,似乎节点被删除,但程序的内存使用量呈指数增长,而程序正在创建更多的星树,这意味着它们不会被销毁。而且,析构函数是空的。我只是删除了这个方法中的节点。 提前谢谢你帮助我。

此外,我从另一个类继承节点结构。有可能是问题吗?并且两个类析构函数都是空的。

1 个答案:

答案 0 :(得分:1)

这里什么都不会泄漏内存,但是你不需要显式的递归。所有你需要的是:

node::~node()
{
    while (size() > 0) {
        delete child[size()-1];
    }
}

和某处delete root;