c++编译通过,调试却出现了错误,看了好多遍还是找不出错误~ 20C

小白这次的c++程序是要实现多重继承,虚函数等功能的一个学校人员管理系统。

系统要求由一个基类继承出学生类和老师类,再由学生类和老师类共同继承出在读教
师类和在职研究生类。学生类和老师类继承基类时,基类是虚基类。
小白先写了基类和教师类然后先试一番,生成解决方案没有出现错误,但是“执行(不调试)”之后,出现黑色的执行窗口,前面立马出现一个框框,上面写着”my6/*我滴文件名*/ .exe已经停止工作,由于出现问题,程序停止正常工作。windows将关闭程序,并会在有可用的解决方案时通知你“。图片说明
小白上百度搜,度娘说,可能时堆栈溢出,或者内存使用不当等问题,可是小白不太懂这些,前前后后看了几遍代码,修来修去,还是不能,还有噢,vs我用了“开始调试”后出现了这样的情况图片说明

求大佬大神们帮助!~~
以下就是我哒程序~~

#include<iostream>
using namespace std;
#include<string>
#define N 20
int nt = 0;
class person
{
protected:
    string name;
    char sex;
    int age;
public:
    person(string n = '\0', char s = '\0', int a = 0) { name = n; sex = s; age = a; }
    virtual void set() = 0;
    virtual void input(int) = 0;
    virtual void display() = 0;
    virtual void add() = 0;
    virtual void search() = 0;
    virtual void find(string) = 0;
    virtual void find(int) = 0;
    virtual void find(string, int[]) = 0;
    virtual void find(int, int[]) = 0;
    virtual void choosehowmodify() = 0;
    virtual void modify(int[]) = 0;
};

class teacher :virtual public person
{
private:
    string zhicheng;
    int gongzi;
public:
    int gonghao;
    teacher(string n = "teacher", char s = '\0', int a = 0, int gh = 0, string z = '\0', int gz = 0) :person(n, s, a) { gonghao = gh; zhicheng = z; gongzi = gz; }
    void set();
    void input(int);
    void display();
    void add();
    void search();
    void find(string);
    void find(int);
    void find(string, int[]);
    void find(int, int[]);
    void choosehowmodify();
    void modify(int[]);
    friend ostream & operator<<(ostream &output, const teacher &t);
}tea[N];

void teacher::set()
{
    cout << "创建教师人数:";
    cin >> nt;
    if (nt <= N)
    {
        int i;
        for (i = 0; i < nt; i++)
        {
            tea[i].input(i);
        }
    }
    else cout << "超出容量!最多输入" << N << "人!" << endl << "请重新输入创建人数:";
}

void teacher::input(int i)
{
    cout << "请输入第" << i + 1 << "名教师的信息:" << endl;
    cout << "姓名:";
    cin >> name;
    cout << "性别:";
    cin >> sex;
    cout << "年龄:";
    cin >> age;
    cout << "职称:";
    cin >> zhicheng;
    cout << "工资:";
    cin >> gongzi;
    cout << "工号:";
    cin >> gonghao;
}

ostream & operator<<(ostream &output, const teacher &t)
{
    output << "姓名:" << t.name << endl << "性别:" << t.age << endl << "年龄:" << t.sex << endl << "职称:" << t.zhicheng << endl << "工资:" << t.gongzi << endl << "工号:" << t.gonghao << endl;
    return output;
}

void teacher::display()
{
    int i;
    cout << "显示教师信息:";
    for (i = 0; i < nt; i++)
    {
        cout << tea[i];
    }
}

void teacher::add()
{
    cout << "添加教师人数:";
    int temp;
    cin >> temp;
    if (nt + temp <= N)
    {
        int i;
        for (i = nt; i < nt + temp; i++)
        {
            tea[i].input(i);
            nt++;
        }
    }
    else cout << "超出容量!最多再输入" << N - nt << "人!" << endl << "请重新输入添加人数:";
}

void teacher::search()
{
    bool pan = true;
    while (pan)
    {
        pan = false;
        cout << "1.姓名:" << endl << "2.工号:" << endl;
        cout << "查询教师信息,请选择查询途径:";
        int x;
        cin >> x;
        if (x == 1 || x == 2)
        {
            switch (x)
            {
            case 1:
            {
                cout << "输入姓名:";
                string nam;
                cin >> nam;
                find(nam);
                break;
            }
            case 2:
            {
                cout << "输入工号:";
                int gh;
                cin >> gh;
                find(gh);
                break;
            }
            }
            cout << "输入y继续查询,输入n则退回教师信息操作菜单,请选择:";
            char y;
            cin >> y;
            if (y == 'y')
                pan = true;
        }
        else
        {
            cout << "输入的选择无效,请输入1或2!";
            pan = true;
        }
    }
}

void teacher::find(string nam)
{
    int i;
    for (i = 0; i < nt; i++)
    {
        if (nam == tea[i].name)
        {
            cout << tea[i];
        }
    }
}

void teacher::find(int gh)
{
    int i;
    for (i = 0; i < nt; i++)
    {
        if (gh == tea[i].gonghao)
            cout << tea[i];
    }
}

void teacher::find(string nam, int list[])
{
    int i, j = 0;
    for (i = 0; i < nt; i++)
    {
        if (nam == tea[i].name)
        {
            list[j] = i;
            j++;
        }
    }
}

void teacher::find(int gh, int list[])
{
    int i, j = 0;
    for (i = 0; i < nt; i++)
    {
        if (gh == tea[i].gonghao)
        {
            list[j] = i;
            j++;
        }
    }
}

void teacher::choosehowmodify()
{
    bool pan = true;
    while (pan)
    {
        pan = false;
        cout << "1.姓名:" << endl << "2.工号:" << endl;
        cout << "修改教师信息,请选择寻修改途径:";
        int x;
        cin >> x;
        if (x == 1 || x == 2)
        {
            switch (x)
            {
            case 1:
            {
                cout << "输入姓名:";
                string nam;
                cin >> nam;
                int list[N] = { 0 };
                find(nam, list);
                modify(list);
                break;
            }
            case 2:
            {
                cout << "输入工号:";
                int gh;
                cin >> gh;
                int list[N] = { 0 };
                find(gh, list);
                modify(list);
                break;
            }
            }
            cout << "输入y继续修改,输入n则退回教师信息操作菜单,请选择:";
            char y;
            cin >> y;
            if (y == 'y')
                pan = true;
        }
        else
        {
            cout << "输入的选择无效,请输入1或2!";
            pan = true;
        }
    }
}

void teacher::modify(int list[])
{
    int i;
    for (i = 0; list[i] != 0; i++)
    {
        bool pan = true;
        while (pan)
        {
            pan = false;
            cout << tea[list[i]] << endl;
            cout << "1.姓名:" << endl << "2.性别:" << endl << "3.年龄:" << endl << "4.职称:" << endl << "5.工资:" << endl << "6.工号:" << endl;
            cout << "请输入欲修改的信息序号:";
            int z;
            cin >> z;
            switch (z)
            {
            case 1:
            {
                cout << "请输入新姓名:";
                cin >> tea[list[i]].name;
                break;
            }
            case 2:
            {
                cout << "请输入新性别:";
                cin >> tea[list[i]].sex;
                break;
            }
            case 3:
            {
                cout << "请输入新年龄:";
                cin >> tea[list[i]].age;
                break;
            }
            case 4:
            {
                cout << "请输入新职称:";
                cin >> tea[list[i]].zhicheng;
                break;
            }
            case 5:
            {
                cout << "请输入新工资:";
                cin >> tea[list[i]].gongzi;
                break;
            }
            case 6:
            {cout << "请输入新工号:";
            cin >> tea[list[i]].gonghao;
            break;
            }
            }
            cout << "输入y继续修改该教师,输入n则进入下一步:";
            char x;
            cin >> x;
            if (x == 'y')
                pan = true;
        }
    }
}

int main()
{
    void choosefunction(person*);
    person *pt;
    bool pan = true;
    while (pan)
    {
        cout << "**类选择菜单**" << "1.教师" << endl << "2.学生" << endl << "3.在职研究生" << endl << "4.在读教师" << endl << endl << "请选择:";
        char x;
        cin >> x;
        switch (x)
        {
        case 1:pt = tea; choosefunction(pt); break;
        case 2:cout << "敬请期待!"; break;
        }
        cout << "输入y则继续对“类选择菜单”进行操作,输入n则退出程序,请选择:";
        char y;
        cin >> y;
        if (y == 'y')
            pan = true;
        else
            pan = false;
    }
    return 0;
}

void choosefunction(person *pt)
{
    bool pan = true;
    while (pan)
    {
        cout << "a.创建" << endl << "b.显示" << endl << "c.添加" << endl << "d.查询" << endl << "e.修改" << endl << "请选择:" << endl;
        char x;
        cin >> x;
        switch (x)
        {
        case 'a':pt->set(); break;
        case 'b':pt->display(); break;
        case 'c':pt->add(); break;
        case 'd':pt->search(); break;
        case 'e':pt->choosehowmodify(); break;
        }
        cout << "输入y则继续对该类进行操作,输入n则退回“类选择菜单”,请选择:";
        char y;
        cin >> y;
        if (y == 'y')
            pan = true;
        else
            pan = false;
    }

}

10个回答

这种比较基础的问题呢,还是需要自己去学会调试的,一步一步,逐行代码调试,不然总有问不完的问题。

单从你的异常信息来看,应该是空指针引起的,具体来说,就是 _First 指针为 NULL,具体原因你得单步调试一下。

应该是内存问题,慢慢调试吧

内存错误,一行行注释掉,慢慢找吧

string n = '\0'改为双引号

不懂。。我是做java的

若编译通过,用开始执行(不调试)即ctrl+f5就可。

单步调试看哪里出现问题试试

单步调试一下找错误,或者重新建一个工程,将你的源文件和头文件下的.h和.cpp复制过去,打开主程序重新编译!

这个问题可以试试单步调试,
1.要么数组越界;
2.要么操作了为null的指针。
一步一步打断点就可以确定错误在哪。

访问权限的问题,person类中的成员变量不应该为protected,你改为public试试

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c++编译通过,调试却出现了错误,看了好多遍还是找不出错误~
-
编译调试时出现错误:
-
python如何调试C++编译的dll
-
c,请帮我看看这个程序,怎么都找不到错误在哪,编译没问题调试一直出错
-
C++程序编译报错,是软件的问题吗?
-
win10下驱动RTLcopymemery导致蓝屏
-
编译器错误消息: CS0433
-
MAC OS 公开的驱动源码编译不过的问题
-
VS2003升级编译错误LNK1179错误: 重复的 COMDAT“_IID_IDispatchEx"
-
直接引用带有import关键字的JS脚本会报错
-
C++编译报错,写入内存错误
-
C++ Sprintf_s函数补全缺省内容
-
Qt编译报错'float' is not a class, struct, or union type
-
vC的1168错误提示,如何解决
-
请问下Linux下C++的正则表达式匹配全部字符的时候为什么会报错?
-
vscode debug C++ 时无法打开控制台(或者说运行不了 gdb.exe)?
-
JNI层的 C++代码如何实现断点调试
-
如何引用不同文件里的全局变量
-
Microsoft Visual Studio C# Express Debug 不弹出异常了
-
vs2013工程前后两个版本,前面版本调试正确,后面版本把新增代码注释调试错误?
-
程序员真是太太太太太有趣了!!!
网络上虽然已经有了很多关于程序员的话题,但大部分人对这个群体还是很陌生。我们在谈论程序员的时候,究竟该聊些什么呢?各位程序员大佬们,请让我听到你们的声音!不管你是前端开发...
史上最详细的IDEA优雅整合Maven+SSM框架(详细思路+附带源码)
网上很多整合SSM博客文章并不能让初探ssm的同学思路完全的清晰,可以试着关掉整合教程,摇两下头骨,哈一大口气,就在万事具备的时候,开整,这个时候你可能思路全无 ~中招了咩~ ,还有一些同学依旧在使用eclipse或者Myeclipse开发,我想对这些朋友说IDEA 的编译速度很快,人生苦短,来不及解释了,直接上手idea吧。这篇文章每一步搭建过程都测试过了,应该不会有什么差错。本文章还有个比较优秀的特点,就是idea的使用,基本上关于idea的操作都算是比较详细的,所以不用太担心不会撸idea!最后,本文
史上最全的后端技术大全,你都了解哪些技术呢?
| 导语工欲善其事,必先利其器;士欲宣其义,必先读其书。后台开发作为互联网技术领域的掌上明珠,一直都是开发者们的追逐的高峰。本文将从后台开发所涉及到的技术术语出发,基于...
吃人的那些 Java 名词:对象、引用、堆、栈
作为一个有着 8 年 Java 编程经验的 IT 老兵,说起来很惭愧,我被 Java 当中的四五个名词一直困扰着:**对象、引用、堆、栈、堆栈**(栈可同堆栈,因此是四个名词,也是五个名词)。每次我看到这几个名词,都隐隐约约觉得自己在被一只无形的大口慢慢地吞噬,只剩下满地的衣服碎屑(为什么不是骨头,因为骨头也好吃)。
我花了一夜用数据结构给女朋友写个H5走迷宫游戏
起因 又到深夜了,我按照以往在csdn和公众号写着数据结构!这占用了我大量的时间!我的超越妹妹严重缺乏陪伴而 怨气满满! 而女朋友时常埋怨,认为数据结构这么抽象难懂的东西没啥作用,常会问道:天天写这玩意,有啥作用。而我答道:能干事情多了,比如写个迷宫小游戏啥的! 当我码完字准备睡觉时:写不好别睡觉! 分析 如果用数据结构与算法造出东西来呢? ...
团队中的 Git 实践
在 2005 年的某一天,Linux 之父 Linus Torvalds 发布了他的又一个里程碑作品——Git。它的出现改变了软件开发流程,大大地提高了开发流畅度!直到现...
不识 Pandas,纵是老手也枉然?
作者 |周志鹏 责编 | 郭 芮 这段时间和一些做数据分析的同学闲聊,我发现数据分析技能入门阶段存在一个普遍性的问题,很多凭着兴趣入坑的同学,都能够很快熟悉Python基础语法,然后不约而同的一头扎进《利用Python进行数据分析》这本经典之中,硬着头皮啃完之后,好像自己什么都会了一点,然而实际操作起来既不知从何操起,又漏洞百出。 至于原因嘛,理解不够,实践不够是两条老牌的拦路...
接班马云的为何是张勇?
上海人、职业经理人、CFO 背景,集齐马云三大不喜欢的张勇怎么就成了阿里接班人? 作者|王琳 本文经授权转载自燃财经(ID:rancaijing) 9月10日,张勇转正了,他由阿里巴巴董事局候任主席正式成为阿里巴巴董事局主席,这也意味着阿里巴巴将正式开启“逍遥子时代”。 从2015年接任CEO开始,张勇已经将阿里巴巴股价拉升了超过200%。但和马云强大的个人光环比,张勇显得尤其...
程序员终极面试指南!
身为技术人,如何拿下自己心仪的 offer? 作者|James Bedford 译者 |苏本如,责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 以下为译文: 介绍 最近半年以来,我一直在积极指导开发人员,包括新手和有经验的开发人员。我发现,所有开发人员最关心的问题之一通常都是寻找工作。 如果你已经被录用了,很有可能你经历了一个令人精疲力竭的过程。...
我在快手认识了 4 位工程师,看到了快速发展的公司和员工如何彼此成就!
作者 | 胡巍巍 出品 | CSDN(ID:CSDNnews) 从西二旗地铁站B口出来,步行700多米可以看到一个工业建筑风格的院子。这个独立的院子和后厂村各大互联网公司的高楼林立有些不同。 院子里有7栋6层高的楼,几栋楼之间打通,可以从A栋自由穿行到F栋。这里就是快手总部。这个园区可以容纳6000多名员工,目前40%以上是研发人员。 这些研发人员维护着快手这款日活超过2亿的ap...
让程序员崩溃的瞬间(非程序员勿入)
今天给大家带来点快乐,程序员才能看懂。 来源:https://zhuanlan.zhihu.com/p/47066521 1. 公司实习生找 Bug 2.在调试时,将断点设置在错误的位置 3.当我有一个很棒的调试想法时 4.偶然间看到自己多年前写的代码 5.当我第一次启动我的单元测试时 ...
分享一个 pycharm 专业版的永久使用方法
刚开始接触Python,首先要解决的就是Python开发环境的搭建。 目前比较好用的Python开发工具是PyCharm,他有社区办和专业版两个版本,但是社区版支持有限,我们既然想好好学python,那肯定得用专业的不是。 但他专业版要么只能试用一个月,要么就是 $ , 身为猿军中的一员怎么能让他们这些小伎俩阻碍了我们继续前进的步伐呢?所以我在度娘的引导下,一步步实现了PyCharm的永久使用(虽...
用Python分析2000款避孕套,得出这些有趣的结论
到现在为止,我们的淘宝教程已经写到了第四篇,前三篇分别是: 第一篇:Python模拟登录淘宝,详细讲解如何使用requests库登录淘宝pc端。 第二篇:淘宝自动登录2.0,新增Cookies序列化,教大家如何将cookies保存起来。 第三篇:Python爬取淘宝商品避孕套,教大家如何爬取淘宝pc端商品信息。 今天,我们来看看淘宝系列的第四篇 我们在上一篇的时候已经将淘宝数据爬取下来了,...
无需安装,仅需 1 条指令,秒实现内网穿透的神器,你有用过吗?
什么是 ServeoServeo 是一个免费的内网穿透服务,Serveo 可以将本地计算机暴露在互联网上,官方声称其为 Ngrok 的绝佳替代品。Serveo 其最大优点...
作为曾经的 Web 开发“王者”,jQuery 的传奇怎么续写?
作为世界上使用最广泛的JavaScript库,jQuery曾经帮助过一代开发人员创建了适用于每种浏览器的网站,可以说,Web开发之所以能有今天,jQuery可谓功不可没。但是随着新的库、框架和范例的不断涌现,jQuery作为Web开发首选工具的地位已经逐渐不保......任何事物都有其自身发展的兴盛与衰落,短期内jQuery并不会消失,但是对于其来说,又该如何维稳逆袭呢? 作者|Da...
重磅:硬核前端面试开源项目汇总(进大厂必备)
复习前端面试的知识,是为了巩固前端的基础知识,最重要的还是平时的积累!”开源项目https://github.com/InterviewMap/CS-Interview...
为什么平头哥做芯片如此迅猛?
作者 | 胡巍巍 发自杭州云栖大会责编 | 唐小引出品 | CSDN(ID:CSDNnews)2018年10月31日,阿里旗下的平头哥半导体有限公司成立。如今,平头哥成立...
对计算机专业来说学历真的重要吗?
我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记得帮我点赞哦。 先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...
技术人员要拿百万年薪,必须要经历这9个段位
很多人都问,技术人员如何成长,每个阶段又是怎样的,如何才能走出当前的迷茫,实现自我的突破。所以我结合我自己10多年的从业经验,总结了技术人员成长的9个段位,希望对大家的职...
多线程编程是后台开发人员的基本功
这里先给大家分享一个小故事:在我刚开始参加工作的那年,公司安排我开发一款即时通讯软件(IM,类似于 QQ 聊天软件),在这之前我心里也知道如果多线程操作一个整型值是要加锁...
相关热词 c#panel增加滚动条 c#中生成的dll文件 c# 模板类 c# 截取txt文本内容 c# 内存 占用 c#时间格式化 不带- c#替换字符串中指定位置 c# rdlc 动态报表 c# 获取txt编码格式 c#事件主动调用