释放一个指向C中链表的双指针

时间:2014-11-10 07:28:15

标签: c list pointers

我是c的新手,并尝试使用单个链表实现堆栈。为了实现push()和pop()函数,我传递了一个双指针。在main中,我将Node * node_head初始化为NULL

我使用malloc()和free()来成功处理内存泄漏但似乎我在某处无法弄清楚内存泄漏。在释放双指针时我应该采取不同的方法吗?谢谢,这里有两个功能:

void stack_push(Node **node_head, int d)
{
    Node *node_new = malloc(sizeof(Node));

    node_new -> data = d;
    node_new -> next = *node_head;
    *node_head = node_new;
}

int stack_pop(Node **node_head)
{
    Node *node_togo = *node_head;
    int d = 0;

    if(node_head)
    {
        d = node_togo -> data;
        *node_head = node_togo -> next;
        free(node_togo);
    }
    return d;
}

1 个答案:

答案 0 :(得分:0)

代码中唯一的错误是函数stack_pop。

if(node_head)

当然你可以检查node_head是否等于NULL虽然在我看来这是一个超级检查。但是你必须检查*node_head是否不等于NULL。

该功能可能看起来像

int stack_pop(Node **node_head)
{
    int d = 0;

    if( *node_head )
    {
        Node *node_togo = *node_head;

        d = node_togo -> data;

        *node_head = node_togo -> next;

        free( node_togo );

    }

    return d;
}