[英]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.