在 C 中,这个基本堆栈实现提供分段 fault.How 来修复它?

In C this basic stack implementation gives segmentation fault.How to fix it?

在C:

中使用链表创建堆栈实现

具有 2 个字段值和下一个指针(指向链表中的下一个节点)的结构节点。此处为基于链表的实现定义了堆栈函数 -pop、push 和 peek。

#include<stdio.h>
#include<stdlib.h>
struct node
{
    int data;
    struct node* next;
};
void push(struct node** l,int val)//push operation
{
    struct node* t=(struct node*) malloc( sizeof(struct node));
    t->data=val;
    t->next=*l;
    *l=t->next;
    printf("pushed:%d\n",val);

}
int is_empty(struct node** l)//check stack_empty
{
    printf("hai1");
    return (*l)==NULL;
}
void pop(struct node** l)//pop operation
{
    if(!is_empty(l))
    {
        printf("hai");
        struct node* temp=*l;
        (*l)=(*l)->next;
        printf("popped:%d\n",temp->data);
        free(temp);
    }
}
void peek(struct node* l)//peek function
{
    printf("peeked: %d\n", l->data);
}
int main()
{
    struct node* l=NULL;
    push(&l,10);
    push(&l,20);
    pop(&l);
    peek(l);
    return 0;
}

如何修复使用gcc 4.8.2 C编译器编译时代码中的段错误?

void push(struct node** l,int val)//push operation
{
    struct node* t=(struct node*) malloc( sizeof(struct node));
    t->data=val;
    t->next=*l;
    *l=t;    // <----------------- Not *l=t->next;
    printf("pushed:%d\n",val);

}