2016-03-06 42 views
0

我使用了我的树下面的免费功能有点记忆:解放出来的树,但IDE收益随着时间的推移

void freeTree(struct node *tree) { 

    if (tree == NULL) return; 

    freeTree(tree->left); 
    freeTree(tree->right); 
    free(tree); 

} 

而且我创建一个树/这样就可以操作:

struct node *root = NULL; 

root = createTree(testNodes); 

inOrderPrint(root); 

freeTree(root); 
节点结构的

定义:

struct node { 
    int val; 
    int color; 
    struct node *parent; 
    struct node *left; 
    struct node *right; 
}; 

我已经运行这个就够了(几个小时)后发现,记忆开始建立(很少量)在我的IDE(我使用CLION)。我发布信息来询问我的freeTree函数是否正确实现以排除这种情况,并查看它是否可能是导致此慢速内存积聚的其他内容。

+0

'struct node'的定义是什么?它是否有任何其他指针成员的参考对象可能需要被释放?例如,显然有些内容需要打印,这表明它可能有一个字符串指针。 –

+0

@JohnBollinger更新了结构定义的问题。 – httpNick

+1

您是否尝试过使用['valgrind'](http://valgrind.org/)?它在您的平台上可用吗?从表面上看,你的代码看起来不错,但是我们看不到任何分配,这意味着你可能会做一些意想不到的事情,并且不会释放一些内存。基本上,你需要提供一个可以解决问题的MCVE([MCVE]),在那之前,我们无能为力。 –

回答

0

假设你的树是在由struct node成员的名字所暗示的方式构造事实,即节点leftright指针设置为NULL对于没有左或右的孩子,分别与节点,你的freeTree()函数将释放所有与其参数指向的根节点相关的内存。如果你有泄漏,那是在其他地方。

相关问题