[英]Memory loss using valgrind in c
我有一个自定义struct
mystruct。
typedef struct mystruct
{
int data;
struct mystruct * parent;
struct mystruct * child;
struct mystruct * next;
}mystruct;
现在,我正在函数traverse()
中对此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
而导致的内存丢失。 如何消除这些内存丢失?
没有完整的valgrind输出,不是很清楚,但是在这里:
root=NULL; free(root); root=newNode;
您将NULL
分配给root,然后释放完全没有意义的NULL
,然后将新指针分配给root。 因此,根指针的旧值丢失了,您无法释放该内存。 考虑删除root=NULL
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.