在c中使用valgrind的内存丢失

时间:2016-04-17 20:23:08

标签: c

我有一个自定义的struct mystruct。

typedef struct mystruct
{
    int data;
    struct mystruct * parent;
    struct mystruct * child;
    struct mystruct * next;
}mystruct;

现在我正在函数traverse()

中对此mystruct进行后序遍历
mystruct * create(mystruct * root)
{
    mystruct * newNode=malloc(sizeof(mystruct));
    //change some pointers like make newNode->parent=root->parent
    //
    //
    return newNode;
}

void traverse(mystruct * root)
{
 if(root==NULL)
    return;

 //here I am calling a new function 
 if() // somecondition
 {
    mystruct * newNode=create(root);
    root=NULL;
    free(root);
    root=newNode;
 }


 traverse(root->child);
 traverse(root->next);

}

void delete(mystruct * root)
{
    if(root==NULL)
        return;

    delete(root->child);
    delete(root->next);
    free(root);
}

即使在最后释放我的结构后,valgrind也会显示因创建newNode导致的内存丢失。如何消除这些内存损失?

1 个答案:

答案 0 :(得分:3)

没有完整的valgrind输出并不是很清楚,但是在这里:

root=NULL; free(root); root=newNode;

您已将NULL分配给root,然后释放NULL完全没有意义的内容,并为root分配新指针。因此,root指针的旧值会丢失,您无法释放该内存。考虑删除root=NULL