关于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";
} 展开
#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";
} 展开
2个回答
展开全部
Student类的构造函数的问题.
你的缺省构造函数是这样定义的Student(){},
name 指针并没有初始化, 但是在析构函数中调用了delete name.
因此, 只要调用了Student(), 那么就会出现内存问题
TutorPair类中的student成员, 在TutorPair()中也没有初始化(因此自动调用了Student())
要避免问题的话这样写
Student(): name(0){} 初始化为0, 因为C++释放0指针是安全的
此外建议, 对于name 使用delete [] 而不是delete, 因为那样会内存泄露, 虽然暂时看不出来
你的缺省构造函数是这样定义的Student(){},
name 指针并没有初始化, 但是在析构函数中调用了delete name.
因此, 只要调用了Student(), 那么就会出现内存问题
TutorPair类中的student成员, 在TutorPair()中也没有初始化(因此自动调用了Student())
要避免问题的话这样写
Student(): name(0){} 初始化为0, 因为C++释放0指针是安全的
此外建议, 对于name 使用delete [] 而不是delete, 因为那样会内存泄露, 虽然暂时看不出来
追问
首先说声谢谢。但是根据你说的修改了,还是出现同样的问题,该怎么办?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询