双向链表运行出现代码越界问题,求解答!!

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

img

问题相关代码,请勿粘贴截图
void DeleteNode(struct Node *Head,char *Name)
{
    Node *p=NULL;
    p=Head;
    for(int i=0;i<NodeCount;i++)
    {
        if(strcmp(p->Name,Name)==0)
        {
            if(p==Head)
            {
                p=Head->next;
                free(Head);
                newHead=p;
                Head=newHead;
                NodeCount--;
                printf("删除成功");
                return;
            }
            if(p->next==NULL)
            {
                p->pre->next=NULL;
                free(p);
                NodeCount--;
                printf("删除成功");
                return;
            }
            p->pre->next=p->next;
            p->next->pre=p->pre;
            free(p);
            NodeCount--;
            printf("删除成功");
            return;
        }
        p=p->next;
    }
    printf("没有找到数据");
}

运行结果及报错内容

0xC0000005: 写入位置 0 时发生访问冲突

我的解答思路和尝试过的方法

已经搜索过 说是可能因为代码越界问题,但是不知道怎么更改!求解答

我想要达到的结果

你得先检查p是否为空,否则p->next就崩了

这个结构体是怎么定义的?