关于VC++6运行程序后出现“出现一个问题,导致程序停止正常工作。请关闭该程序”,望解决,谢谢!

以下是程序代码:#include<iostream.h>#include<string.h>classStudent{public:Student(char*pName,... 以下是程序代码:
#include<iostream.h>
#include<string.h>

class Student
{
public:
Student(char* pName,int xHours,float xgpa)
{

cout<<"constructing student "<<pName<<'\t'<<xHours<<'\t'<<xgpa<<endl;

name=new char[strlen(pName)+1];
if(name!=0)
{
strcpy(name,pName);
}

semesHours=xHours;
gpa=xgpa;
}

~Student()
{
cout<<"destructing "<<name<<'\t'<<semesHours<<'\t'<<gpa<<endl;
name[0]='\0';
delete name;
}

Student(){}

protected:

char * name;
int semesHours;
float gpa;
};

class Teacher
{
public:
Teacher()
{
cout<<"constructing teacher.\n";
}
~Teacher()
{
cout<<"destructing teacher.\n";
}

};

class TutorPair
{
public:
TutorPair()
{
cout<<"construting tutorpair.\n";
noMeetings=0;
}
~TutorPair()
{
cout<<"destructing tutorpair.\n";
}

protected:
Student student;
Teacher teacher;
int noMeetings;
};

void main()
{
Student ss("Jenny",22,3.5);
cout<<"\n";
TutorPair fg;
cout<<"back in main.\n";

}
展开
 我来答
Bk0X
2012-06-01 · TA获得超过9413个赞
知道小有建树答主
回答量:1217
采纳率:60%
帮助的人:672万
展开全部
Student类的构造函数的问题.
你的缺省构造函数是这样定义的Student(){},
name 指针并没有初始化, 但是在析构函数中调用了delete name.
因此, 只要调用了Student(), 那么就会出现内存问题

TutorPair类中的student成员, 在TutorPair()中也没有初始化(因此自动调用了Student())

要避免问题的话这样写
Student(): name(0){} 初始化为0, 因为C++释放0指针是安全的

此外建议, 对于name 使用delete [] 而不是delete, 因为那样会内存泄露, 虽然暂时看不出来
追问
首先说声谢谢。但是根据你说的修改了,还是出现同样的问题,该怎么办?
百度网友92a6e215d7
2017-03-16 · 超过12用户采纳过TA的回答
知道答主
回答量:55
采纳率:50%
帮助的人:11.9万
展开全部
你这类真的是乱的很啊,类里面你分配的那个name为什么要释放,而且你这里面基本知识使用得很混乱,你需要学习一下C++中基本类的定义和使用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式