C语言学生信息管理系统的浏览问题


typedef struct date
{
    int year;
    int month;
    int day;
}DATE;
//姓名、性别、民族、出生日期、班级、地址、手机号码、宿舍
typedef struct student
{
    char xm[20];
    char xb[10];
    char mz[15];
    DATE csrq;
    char bj[20];
    char dz[50];
    char sj[15];
    char ss[14];
    struct student *next;
}STUDENT;

这个是结构体


STUDENT* TianJia(STUDENT* SL)
{
    STUDENT* pNew;
    pNew = (STUDENT*)malloc(sizeof(STUDENT));
    int year, month, day;
    DATE cs = { 1976,1,15 };
    char xm[20], mz[20], bj[20], dz[50], sj[15], ss[50];
    char xb[10];
    printf("请输入要添加的学生信息:\n");
    printf("姓名:");
    gets(xm);
    strcpy(pNew->xm, xm);
    printf("性别:");
    gets(xb);
    strcpy(pNew->xb, xb);
    printf("民族:");
    gets(mz);
    strcpy(pNew->mz, mz);
    printf("出生日期(year-month-day):");
    scanf("%d-%d-%d", &year, &month, &day);
    pNew->csrq.year = year; pNew->csrq.month = month; pNew->csrq.day = day;
    getchar();//吸收所按的回车键 
    printf("班级:");
    gets(bj);
    strcpy(pNew->bj, bj);
    printf("地址:");
    gets(dz);
    strcpy(pNew->dz, dz);
    printf("手机:");
    gets(sj);
    strcpy(pNew->sj, sj);
    printf("宿舍:");
    gets(ss);
    strcpy(pNew->ss, ss);
    pNew->next = NULL;

    SL = tianjiaxuesheng(SL, pNew);
    //printf("TianJia-SL:%s\n",SL->bj); 
    return;
}



void LiuLan(STUDENT* SL)
{
    printf("***学生信息浏览***\n");
    printf("序号\t姓名\t性别\t民族\t出生日期\t班级\t\t地址\t\t手机\t\t宿舍\n");
    STUDENT* p1, * p2;
    p1 = SL;
    int i = 1;
    while (p1)
    {
        printf("%d\t%s\t%s\t%s\t%d-%d-%d\t%s\t%s\t%s\t%s\n",i++,p1->xm, p1->xb, p1->mz, p1->csrq.year, p1->csrq.month, p1->csrq.day, p1->bj, p1->dz, p1->sj, p1->ss);
        p1 = p1->next;
    }
    return;
}

这个是部分代码,添加和浏览操作。我想问一下,我这个学生信息管理系统,在添加信息后,浏览信息,会报错,p1指向0x48。这个是什么意思,怎么解决呀

p1指向0x48