簡體   English   中英

在C中使用valgrind的內存丟失

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM