NICKZX136 2022-12-31 00:20 采纳率: 66.7%
浏览 40
已结题

运行时引发了异常: 读取访问权限冲突。p2 是 0xF

要写一个职工工资管理系统;

1. 职工工资项目信息的基本结构如下:
char *ITEM[MAXI] //职工工资项目数组,存放工资项目名称。(字符串数组)
说明:工资项目可包括:基本工资、职务工资、岗位津贴、医疗保险、公积金、
奖金、住房补贴等。工资项目可以按需要增加、修改和删除,不固定。工资项目
最多 50 项, 0~49。
2.系统基本功能:提供工资项目信息的录入、修改和删除;职工工资信息的录
入、修改、查询和统计等,工资项目及职工工资信息可保存在文件中,系统启动
时打开文件可新增职工工资信息并保存。

结构体:

typedef struct staff {
    int num;            /* 职工编号 */
    char name[20];        /* 姓名 */
    char dept[50];        /* 所属部门 */
    double S[MAXI];         /* 工资项目数组,与数组 ITEM[MAXI]的标号对应,0~49*/
    double total;        /* 工资合计 */
    struct stuff *next;
}EMPLOYEE;

主函数中全局变量:

EMPLOYEE* head = NULL, * tail = NULL;
char ITEM[MAXI][20];
int count1 = -1;        /*项目数量计数*/ /*count1 +1 是真实的项目数量*/
int count_staffnum = 0;        /*职工数量统计*/

相关函数:

extern EMPLOYEE* head;
void fun12()    /*删除职工信息记录*/
{
    EMPLOYEE* p1=NULL, * p2=NULL;
    int num;
    char re[10];
    int cnt=0;    //用于计数
    if (head == NULL)
    {
        printf("\n");
        printf("职工信息记录为空,无法删除\n");
        printf("请按任意键返回上一级\n");
        printf(">>");
        getch(re);
    }
    else
    {
        printf("\n");
        printf("请输入想要删除的职工编号,按回车结束\n");
        printf("返回上一级请输入0\n");
        printf(">>");
        scanf("%d", &num);

        p1 = (EMPLOYEE*)malloc(sizeof(EMPLOYEE));
        p2 = (EMPLOYEE*)malloc(sizeof(EMPLOYEE));
        p1 = head;
        while (p1 != NULL)
        {
            if (p1->num == num)
            {
                cnt++;
                break;
            }
            p1 = p1->next;
        }
        if (cnt == 0)
        {
            printf("查无此员工,无法删除\n");
            printf("请按任意键返回上一级\n");
            printf(">>");
            getch(re);
        }

        if (num != 0)
        {
            p1 = head;
            p2 = p1->next;
            while (p2 != NULL)
            {
                if (p2->num==num)
                {
                    p1->next = p2->next;
                    free(p2);
                    p2 = p1->next;
                }
                else
                {
                    p1 = p1->next;
                    p2 = p2->next;
                }
            }
            if (head->num == num)
            {
                p2 = head;
                head = p2->next;
                free(p2);
            }
            printf("删除职工信息成功!\n");
            printf("请按任意键返回上一级\n");
            printf(">>");
            getch(re);
        }
    }
}

建立链表用于储存职工的ID、姓名、部门、工资项目等;
我已经新增了一个职工信息记录,想要删除:

img

但运行遇到了这个问题:

img


显示引发了异常: 读取访问权限冲突。p2 是 0xF(很多个F)。

请问怎么解决?

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-12-31 11:18
    关注

    删除函数修改如下,供参考:

    extern EMPLOYEE* head;
    void fun12()    /*删除职工信息记录*/
    {
        EMPLOYEE* p1=NULL, * p2=NULL;
        int num;
        char re[10];
        int cnt=0;    //用于计数
        if (head == NULL)
        {
            printf("\n");
            printf("职工信息记录为空,无法删除\n");
        }
        else
        {
            printf("\n");
            printf("请输入想要删除的职工编号,按回车结束\n");
            printf("返回上一级请输入0\n");
            printf(">>");
            scanf("%d", &num);
    
            if (num != 0)
            {
                p1 = head; p2 = NULL;
                while (p1)
                {
                    if (p1->num == num)
                    {
                        cnt++;
                        break;
                    }
                    p2 = p1;
                    p1 = p1->next;
                }
                if (cnt == 0)
                    printf("查无此员工\n");
                else{
                    if (p2 == NULL)
                    {
                        p2 = head;
                        head = p2->next;
                        free(p2);
                    }
                    else{
                        p2->next = p1->next;
                        free(p1);
                    }
                    printf("删除职工信息成功!\n");
                }
            }
        }
        printf("请按任意键返回上一级\n");
        printf(">>");
        getch(re);
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月8日
  • 已采纳回答 12月31日
  • 创建了问题 12月31日

悬赏问题

  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果