这是陳無敵 2020-04-22 11:10 采纳率: 0%
浏览 3760

引发了未经处理的异常:读取访问权限冲突。 **p** 是 nullptr。

C++新手,刚学完链表的作业。
请大佬们麻烦看一下问题出在哪儿了,谢谢了~

#include<iostream>
using namespace std;
class student
{
public:
    char name;
    float score;
    student* next;
};
student* cin_data(int n)//建立链表
{
    student* head, * pre, * p;
    head = new student;
    head->next = NULL;
    pre = head;
    for (int i = 0; i < n; i++)
    {
        p = new student;
        cout << "输入第 " << i + 1 << " 位学生的名字:" << endl;
        cin >> p->name;
        cout << "输入第 " << i + 1 << " 位学生的成绩:" << endl;
        cin >> p->score;
        p->next = NULL;
        pre->next = p;
        pre = p;
    }
    return head;
}
void del(student* head, int n)//删除函数
{
    student* pre, * p;
    pre = head;
    p = pre->next;
    while (p != NULL)
    {
        if (p->score < 60)
        {
            pre->next = p->next;
            delete(p);
            n = n - 1;
            p = pre->next;
        }
        else
        {
            pre = p;
            p = p->next;
        }
    }
}
void change(student* head, int m,char a[],float b[])//重新建立数组
{
    student* p = head->next;
    for (int i = 0; i < m; i++)
    {
        a[i] = p->name;
        b[i] = p->score;
        p = p->next;
    }
}
void sort(student* head, int x,char c[],float d[])//x为删除后的人数。
{
    int i, j;
    char name;
    float score;
    student* p = head->next;
    student* pre = p->next;
    for (int i = 0; i < x - 1; i++)
    {
        for (int j = 0; j < x - i - 1; j++)
        {
            if (d[j]>d[j+1])
            {
                score = d[j + 1];
                d[j + 1] = d[j];
                d[j] = score;
                name = c[j + 1];
                c[j + 1] = c[j];
                c[j] = name;
            }
        }
    }
}
void renew(student* head, int m, char c[], float d[])
{
    student* p = head->next;
    while (p != NULL)
    {
        for (int i = 0; i < m; i++)
        {
            p->name = c[i];
            p->score = d[i];
            p = p->next;
        }
    }
}
int main()
{
    int m,n;
    char a[10];
    float b[10];
    cout << "输入总人数:" << endl;
    cin >> m;
    student* h = cin_data(m), * p;
    del(h, m);
    n = m;//记录及格人数
    change(h, n, a, b);
    sort(h, n, a, b);
    renew(h, n, a, b);
    p = h->next;
    while (p != NULL)
    {
        cout << "姓名:" << p->name;
        cout << "成绩:" << p->score;
        p = p->next;
    }
    return 0;
}
  • 写回答

1条回答 默认 最新

  • threenewbee 2020-04-22 14:10
    关注

    char name;
    name 怎么是单个字符呢,应该是数组
    然后你下面要修改的地方太多了

    评论

报告相同问题?

悬赏问题

  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常
  • ¥15 关于风控系统,如何去选择
  • ¥15 这款软件是什么?需要能满足我的需求
  • ¥15 SpringSecurityOauth2登陆前后request不一致