我的程序在运行时出错,应该是内存使用上的问题,请问应该怎么修改?谢谢了!!

#include<iostream>
#include<string>
using namespace std;
class Student
{
private:
int age;
char *name;
public:
Student(int m,char *n);
Student();
~Student();
void SetMember(int m,char *n);
int GetAge();
char *GetName();
};
Student::Student(int m,char *n)
{
age=m;
if(n)
{
name=new char[strlen(n)+1];
strcpy(name,n);
}
}
Student::Student()
{
age=0;
name="unnamed";
}
Student::~Student()
{
cout<<"Destructor called."<<endl;
delete []name;
}
int Student::GetAge()
{
return age;
}
char *Student::GetName()
{
return name;
}
void Student::SetMember(int m,char *n)
{
age=m;
if(n)
{
name=new char[strlen(n)+1];
strcpy(name,n);
}
else name=0;
}
int main()
{
Student stu[3]={Student(13,"wang")};
stu[2].SetMember(12,"zhang");
cout<<stu[0].GetAge()<<","<<stu[0].GetName()<<endl;
cout<<stu[1].GetAge()<<","<<stu[1].GetName()<<endl;
cout<<stu[2].GetAge()<<","<<stu[2].GetName()<<endl;
return 0;
}
题目要求是:
定义一个学生类 Student ,设计私有数据成员:
年龄 int age; 
姓名 char *name; 
公有成员函数: 
构造函数 带参数的构造函数 Student ( int m,char *n ) ; 
不带参数的构造函数 Student ( ) ; 
析构函数 ~ Student ( ) ; 
释放由 name 申请的动态空间 
改变数据成员值函数 void SetMember ( int m,char *n ) ;
获取数据成员函数 int Getage ( ) ; 
char *Getname ( ) ; 
在 main ( ) 中定义一个有 3 个元素的对象数组并分别初始化,然后输出对象数组的信息, 
main 函数的部分内容如下: 
int main ( ) 

Student stu[3]={Student(13,“wang”);
……

// 第一个元素调用带能构造函数初始化 
// 第二、三个元素由无参构造函数初始化,默认年龄为 0 ,姓名为unnamed; 
//stu[2]. SetMember ( 12,"zhang“ ) ; 
// 修改第三个元素的数据成员值 

慕神8447489
浏览 95回答 1
1回答

呼如林

加个头文件cstring试试,你用了strlen()函数
打开App,查看更多内容
随时随地看视频慕课网APP