2016-04-17 7 views
-1

私はカスタムstructミストを持っています。valgrind in cを使用したメモリの損失

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); 
} 

をこの体mystructの後順トラバーサルをしていたとしても最後に私の構造を解放した後、valgrindnewNodeが作成されることに起因する記憶喪失を示しています。これらのメモリ損失をどのように取り除くことができますか?

答えて

4

ここはフルvalgrindの出力せずに非常に明確ではないですが、:

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

あなたは、あなたが完全に無意味である何NULLを解放し、ルートに新しいポインタを割り当て、ルートへNULLを割り当てます。そのため、ルートポインタの古い値が失われ、そのメモリを解放する方法がありません。 root=NULLを削除することを検討してください。

関連する問題