2016-04-17 92 views
-1

我有一個自定義struct mystruct。使用valgrind在c中丟失內存

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

現在我做這個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記憶力減退創建。我如何消除這些內存損失?

回答

4

這不是沒有完全Valgrind的輸出非常明確的,但在這裏:

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

您分配NULL根,那麼你釋放NULL什麼是完全沒有意義的,並根分配新指針。所以舊的根指針值會丟失,您無法釋放該內存。考慮刪除root=NULL