错误,链表使用C编程

Error, linked lists using C programming

我正在尝试编写简单的推送功能,一切正常,直到 运行 时间,执行的代码崩溃。谁能说清楚原因好吗?

#include<stdio.h>
#include<stdlib.h>

typedef struct list{
int order;
struct list *next;

}list;

void push(struct list **arg,int i);

int main()
   {
struct list **ptr=NULL;

for(int i=0;i<10;++i){
    push(ptr,i);
  }

return 0;
     }

void push(struct list **arg,int i){

 struct list *temp;
 temp= malloc(sizeof(list));

temp->order=i;

temp->next=*arg;

*arg=temp;

}

list *ptr=NULL;
     ^^^           
for(int i=0;i<10;++i){
    push( &ptr,i);
         ^^^^
  }

否则如果这样声明

struct list **ptr=NULL;

然后这个取消引用

*ptr

导致未定义的行为。