2 young111111234 Young111111234 于 2016.03.19 23:48 提问

C++运行调试问题。。。。。


图片说明
#include "stdafx.h"
#include
using namespace std;

class Data_rec
{
public:
Data_rec()
{
name = NULL;
}
~Data_rec()
{
delete[]name;
}
void insert_name(char* pname)
{
delete[]name;
name = new char[strlen(pname) + 1];
strcpy_s(name,255, pname);
}
void print()
{
cout << "Name:" << name << endl;
}
private:
char* name;
};
////////////////////////////////////////////////////////////////////////

class Student :virtual public Data_rec
{
public:
Student() :Data_rec(){ id = NULL;}
~Student(){ delete[]id; }
void insert_id(char* pid)
{
delete[]id;
id = new char[strlen(pid) + 1];
strcpy_s(id,25, pid);
}
void print()
{
Data_rec::print();
cout << "ID:" << endl;
}
private:
char* id;
};
///////////////////////////////////////////////////////////////////////////////////////

class Teacher :virtual public Data_rec
{
public:
Teacher() :Data_rec(){ sal = 0; }
void insert_sal(float psal){ sal = psal; }
void print()
{
Data_rec::print();
cout << "Sal:" << sal << endl;
}
private:
float sal;

};
///////////////////////////////////////////

class Postgrad :public Student
{
public:
Postgrad() :Student(){ dn = NULL; }
~Postgrad()
{
delete[]dn;
}
void insert_dn(char* p)
{
delete[]dn;
dn = new char[strlen(dn) + 1];
strcpy_s(dn,25, p);
}
void print()
{
Student::print();
cout << "Dept name:" << dn << endl;
}
private:
char* dn;
};
/////////////////////////////////////////////

class Tpost :public Teacher, public Postgrad
{
public:
Tpost(): Teacher(), Postgrad(){}
void print()
{
Teacher::print();
Postgrad::print();
}

};

int main()
{
Teacher t;
Tpost tp;
t.insert_name("Li Min");
t.insert_sal(5000);
tp.insert_name("zhang jun");
tp.insert_sal(1500);
tp.insert_id("08901");
tp.insert_dn("computer");
t.print();
tp.print();
return 0;
}
今天学习C++时遇到的,编译是成功的,但运行时会出现异常。这是课本上的程序。请各位大神帮忙看看是什么问题。谢谢啦

2个回答

devmiao
devmiao   Ds   Rxr 2016.03.19 23:52

课本上的程序也不对,应该是指针的问题,点中断,仔细检查出错的行

Young111111234
Young111111234 不知道怎么检查,无从下手,请进一步的指导
一年多之前 回复
YXTS122
YXTS122   2016.03.20 06:17

把id=new char[strlen(pid)+1];上面这句delete []id;去掉,就没事了,要先new才能delete

Young111111234
Young111111234 还是不行,出现的问题跟昨天的一样,不知怎么解决了
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!