如何修复我的代码以清除链接结构中的节点

时间:2014-08-31 01:21:08

标签: c function pointers struct

我之前问了类似的东西,但现在我遇到了另一个问题。 你能看一下吗?我试图释放在我的程序中创建的链接结构中的节点。 这是结构。

struct node {
    unsigned x;
    double y;
    struct node *next;
};
typedef struct node Nodes, *This;

宣布职能

void freeNodes(Nodes *a);
void freeThis(This *);  

功能freeNodes

void freeNodes(Nodes *a) 
{ free(a);
  print ("success");

}

功能freeThis

我不知道如何解决这个问题,因此我可以从整个链表中释放节点。

void freeThis(This *p)
    {
       Nodes *tmp;

       while (p != NULL)
        {

            (*tmp) = Nodes *p;
            *p=(*p)->next;

         freeNodes(tmp);
         tmp = NULL;
        }

    }

2 个答案:

答案 0 :(得分:1)

试试这个

void freeThis(This *p){
    Nodes *tmp;

    if(!p) return;

    while (*p != NULL){
        tmp = *p;
        *p=(*p)->next;

        freeNodes(tmp);
    }

}

答案 1 :(得分:1)

我不会使用This类型,正如我在评论中指出的那样。它让我(更难以理解)正在发生的事情变得更加困难。 (我不认为这对你来说也更容易,但我可能错了。)

鉴于它存在,那么:

void freeThis(This *p)
{
    if (p != 0)
    {
        Nodes *tmp = *p;
        *p = NULL;

        while (tmp != NULL)
        {
            Nodes *next = tmp->next;
            freeNodes(tmp);
            tmp = next;
        }
    }
}