我是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;
}
答案 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;
}