为什么我不能删除生成的树

why I cannot delete the generated trees?

本文关键字:删除 不能 为什么      更新时间:2023-10-16

我正在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;

}

调试时,节点似乎被删除了,但程序的内存使用率呈指数级增长,同时程序正在创建更多的星形树,这意味着它们没有被破坏。此外,析构函数是空的。我只是删除这个方法中的节点。提前感谢你对我的帮助。

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

这里没有任何会泄露内存的内容,但您不需要显式递归。你只需要这个:

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

以及某个地方的CCD_ 1。