C语言、ege图形库,运行借阅功能后,程序会直接退出且bookslist文件里的信息会消失,这是什么原因,要怎么解决

问题遇到的现象和发生背景

,运行借阅功能后,程序会直接退出且bookslist文件里的信息会消失

问题相关代码,请勿粘贴截图
void zjiemianjieyue(sys_edit*editBox)
{
    initEditBox(editBox,500,350,200,30);
    jiemianjieyue();
    const int buffSize = 100;
    char str[100]="";
    int a=0,b;
    int i;
    int x=0;
    for (; is_run();delay_fps(10)) 
    {
        bool calculate = false;
        while (kbmsg()) 
        {
            key_msg msg = getkey();
            if ((msg.key == key_enter) && (msg.msg == key_msg_up)) 
            {
                calculate = true;
            }
        }
        if (calculate) 
        {
            editBox->gettext(buffSize,str);    
            strcpy(bookk,str);
            cleardevice();
            editBox->settext("");
            a=Borrowedbooks(editBox);
            if(a)
            {
                cleardevice();
                editBox->settext("");
                zjiemiancgfh(editBox);
            }
            else
            {
                cleardevice();
                editBox->settext("");
                zjiemiansbfh(editBox);
            }
        }
        
        
    
}
 } 
void jiemianjieyue()//借阅界面 
{
    setcaption("图书借阅!");
    setbkcolor(EGERGB(0x54, 0xFC, 0xFC));//更改背景颜色 
    setcolor(BLACK);        //文字的颜色
    setbkmode(TRANSPARENT);     //设置文字背景色为透明            
    setfont(50, 0, "楷体");   //设置文字大小和字体
    xyprintf(300, 30, "图书借阅");//输出文字(x,y) 
    setlinestyle(2,NULL,1,NULL);//(线型(0为实线),线宽)  
    setwritemode(R2_BLACK, NULL);
    setfont(30, 0, "黑体"); 
    outtextxy(500, 200, "请输入您要借阅的图书编号");//单行输出文字 (x1,y1)
}
int Borrowedbooks(sys_edit*editBox)//借书函数
{
    FILE *fp,*fp3;
    BookInfo *head=NULL;
    BookInfo *p,*p1,*p2;
    fp=fopen("F:\\c语言课设\\bookslist.txt","r");
    int i,loop,k,h,n=0,flag=0,s=0;
    int br=0;
    float bprice=0;
    char bnum[10]={'\0'},bname[10]={'\0'},bauthor[10]={'\0'},bclassfy[10]={'\0'},Publicationdate[10]={'\0'},Publisher[10]={'\0'};
    k=tjzs();//统计图书馆文件个数
    fscanf(fp,"%s%s%s%s%s%s%f%d\n",bnum,bname,bauthor,bclassfy,Publisher,Publicationdate,&bprice,&br);
    p1=p2=(BookInfo*)malloc(sizeof(BookInfo));
    head=p1;
    strcpy(p1->bnum,bnum);//复制书号
    strcpy(p1->bname,bname);//复制书名
    strcpy(p1->bauthor,bauthor);//复制作者
    strcpy(p1->bclassfy,bclassfy);//复制出版社
    strcpy(p1->Publisher,Publisher);
    strcpy(p1->Publicationdate,Publicationdate);
    p1->br=br;//复制书的状态 
    p1->bprice=bprice;//复制单价
    for (i=1;i<k;i++)//先将图书信息建立链表,更改库存
    {
        fscanf(fp,"%s%s%s%s%s%s%f%d\n",bnum,bname,bauthor,bclassfy,Publisher,Publicationdate,&bprice,&br);
        //p2->next=p1;
        //p2=p1;
        p2=(BookInfo*)malloc(sizeof(BookInfo));
        strcpy(p2->bnum,bnum);//复制书号
        strcpy(p2->bname,bname);//复制书名
        strcpy(p2->bauthor,bauthor);//复制作者
        strcpy(p2->bclassfy,bclassfy);//复制出版社
        strcpy(p2->Publisher,Publisher);
        strcpy(p2->Publicationdate,Publicationdate);
        p2->br=br;//复制书的状态 
        p2->bprice=bprice;//复制单价
        //p2->next=p1;
        p2->next=NULL;
        p1->next = p2;
        p1 = p2;
    }
    fclose(fp);
    p=head;
 
    for (;p!=NULL;)
    {
        if(!(strcmp(p->bnum,bookk))&&p->br>=1)//判断要借书的是否存在,标记等于1,存在库存减一
        {
 
            flag=1;
            p->br=p->br-1;
            break;//你的文件中,图书编号是唯一的吗,如果是唯一的,这里直接break就可以了
        }
        p=p->next;
    }
    if(flag)//把状态变化后的链表存入文件
    {
        fp=fopen("F:\\c语言课设\\bookslist.txt","w");//a是追加,w是重写,直接用重写就可以。
        p=head;
        for(;p !=NULL;)
        {
            fprintf(fp,"%-10s %-10s %-10s %-10s %-10s %-10s %.2f %d\n",p->bnum,p->bname,p->bauthor,p->bclassfy,p->Publisher,p->Publicationdate,p->bprice,p->br);
            p=p->next;
        }
        //free(p);
        fclose(fp);
        //释放空间
        while(head)
        {
            p = head->next;
            free(head);
            head = p;
        }
        head = 0;
        p = 0;
 
 
        //建读者文件夹存入借书信息
        fp3=fopen("F:\\c语言课设\\Notreturned.txt","a");
        fprintf(fp3,"%-10s %-10s %-10s %d借\n",st.name,st.password,bookk,date);
        fclose(fp3);
        return 1;
    }
    else
    {
        return 0;
    }

 
}
运行结果及报错内容

运行借阅功能后,程序会直接退出且bookslist文件里的信息会消失

我的解答思路和尝试过的方法
我想要达到的结果

程序可以正常完成借阅功能

部分代码不能调试,建议调试,根据提示解决,是不是非法访问?