c语言链表,用vs2022报错 ,什么原因

用vs2022编译直接报错,出错的原因是读取访问权限冲突,但是删除那加上break后只删除一个目标就不会报错,删掉break就不能运行,求帮助
代码是这样的#include
#include //带头结点单链表
typedef struct Node { //定义链表数据结构
int data;
struct Node* next;
}Node;

Node* initList(){ //初始化 头结点
Node* List = (Node*)malloc(sizeof(Node));//开辟空间后List变成结构体变量
List->data = 0;//头结点不存储数据但可以计数,保存链表元素个数
List->next = NULL;
return List;
}

void headInsert(NodeList,int data) {//头插法
Node
node = (Node*)malloc(sizeof(Node));//新建的一个结点;
node->data = data;
node->next = List->next;
List->next = node;
List->data++;//头结点开始计数
}

void tailInsert(NodeList,int data) {//尾插法
Node
head = List;//后面头结点会改变,先保存下来
Node* node = (Node*)malloc(sizeof(Node));//新建的一个结点;
node->data = data;
node->next = NULL;
List = List->next;//指向第一个保存数据的结点,开始遍历找最后一个结点
while (List->next != NULL) {
List = List->next;
}//遍历结束找到头结点
List->next = node;//让最后一个结点指向新结点
head->data++;//头结点计数
}

void deleteNode(NodeList,int data){//删除结点,输入想删除的数data
Node
pre = List;//后面会改变头结点先找个替身pre
Node* current = List->next;//设第一个保存数据的结点为当前结点current
while (current != NULL) {//遍历查找想要删除的数据data所在的结点
if (current->data == data) {
pre->next = current->next;
free(current);
//break;
}
pre = current;
current = current->next;
}
List->data--;
}

void printList(Node* List) {//遍历带头结点的单链表
List = List->next;//指向第一个保存数据的结点,开始遍历
while (List != NULL) {
printf("%d ", List->data);
List = List->next;
}
printf("\n");
}

int main() {
Node* List = initList();//创建头结点
headInsert(List, 1);
headInsert(List, 2);
headInsert(List, 3);
headInsert(List, 3);
headInsert(List, 3);
tailInsert(List, 4);
tailInsert(List, 5);
tailInsert(List, 6);
printList(List);
deleteNode(List, 3);
printList(List);
return 0;
}

没什么问题,void deleteNode(Node *List, int data) 函数里做了修改,见注释,供参考:

#include <stdio.h>
#include <stdlib.h> //带头结点单链表
typedef struct _Node { //定义链表数据结构
    int    data;
    struct _Node* next;
}Node;

Node* initList() { //初始化 头结点
    Node* List = (Node*)malloc(sizeof(Node));//开辟空间后List变成结构体变量
    List->data = 0;//头结点不存储数据但可以计数,保存链表元素个数
    List->next = NULL;
    return List;
}

void headInsert(Node* List, int data) {//头插法
    Node* node =(Node*)malloc(sizeof(Node));//新建的一个结点;
    node->data = data;
    node->next = List->next;
    List->next = node;
    List->data++;//头结点开始计数
}

void tailInsert(Node* List, int data) {//尾插法
    Node* head = List;//后面头结点会改变,先保存下来 
    Node* node = (Node*)malloc(sizeof(Node));//新建的一个结点;
    node->data = data;
    node->next = NULL;
    List = List->next;//指向第一个保存数据的结点,开始遍历找最后一个结点
    while (List->next != NULL) {
        List = List->next;
    }//遍历结束找到头结点
    List->next = node;//让最后一个结点指向新结点
    head->data++;//头结点计数
}

void deleteNode(Node *List, int data) {//删除结点,输入想删除的数data
    Node* pre = List;//后面会改变头结点先找个替身pre
    Node* current = List->next;//设第一个保存数据的结点为当前结点current
    while (current != NULL) {//遍历查找想要删除的数据data所在的结点
        if (current->data == data) {
            pre->next = current->next;
            free(current);
            current = pre;   //修改//break;
            List->data--;    //修改
        }
        pre = current;
        current = current->next;
    }
}

void printList(Node* List) {//遍历带头结点的单链表
    List = List->next;//指向第一个保存数据的结点,开始遍历
    while (List != NULL) {
        printf("%d ", List->data);
        List = List->next;
    }
    printf("\n");
}

int main() {
    Node* List = initList();//创建头结点
    headInsert(List, 1);
    headInsert(List, 2);
    headInsert(List, 3);
    headInsert(List, 3);
    headInsert(List, 3);

    tailInsert(List, 4);
    tailInsert(List, 5);
    tailInsert(List, 6);
    printList(List);
    
    deleteNode(List, 3);
    printList(List);
    return 0;
}