我有一个自定义的struct
mystruct。
typedef struct mystruct
{
int data;
struct mystruct * parent;
struct mystruct * child;
struct mystruct * next;
}mystruct;
现在我正在函数traverse()
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
导致的内存丢失。如何消除这些内存损失?
答案 0 :(得分:3)
没有完整的valgrind输出并不是很清楚,但是在这里:
root=NULL;
free(root);
root=newNode;
您已将NULL
分配给root,然后释放NULL
完全没有意义的内容,并为root分配新指针。因此,root指针的旧值会丢失,您无法释放该内存。考虑删除root=NULL
。