首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

这个不知道是那里错了,麻烦

2012-04-28 
这个不知道是那里错了,麻烦高手指点#includeiostreamusing namespace stdclassCStudent{int number//

这个不知道是那里错了,麻烦高手指点
#include<iostream>
using namespace std;
class CStudent
{
int number; //学号
char *p_name;//姓名 
  char *p_school;//院系
  char *p_address;//通讯地址
char tel[15];//电话
public:
void show(); //输出数据成员
CStudent(int un,char *pn,char *ps,char *pa,char t[]); //构造函数
~CStudent()
{
delete []p_name;
delete []p_school;
delete []p_address;
}

void setname(char *name) //设置姓名
{
if(p_name ) delete [ ] p_name;//释放存储空间
p_name = new char[strlen(name)+1];//申请存储空间
strcpy(p_name,name);
}
void setnumber(int number1);//设置学号
void setschool(char *school);//设置院系
void setaddress(char *address);//设置通讯地址
void settel(char *mailnum);//设置电话
int getnumber()//获取学号
{
return number;
}
char *getname()//取姓名
{
return p_name;
}
char *getschool()//取学院
{
return p_school;
}
char *getaddress()//取邮编
{
return p_address;
}
char *gettel()//取电话号码
{
return tel;
}
};
CStudent::CStudent(int un,char *pn,char *ps,char *pa,char t[])//构造函数
{
number=un;

if(p_name ) delete [ ] p_name;//释放存储空间
p_name = new char[strlen(pn)+1];//申请存储空间
strcpy(p_name,pn);

if(p_school ) delete [ ] p_school;//释放存储空间
p_school= new char[strlen(ps)+1];//申请存储空间
strcpy(p_school,ps);

if(p_address ) delete [ ] p_address;//释放存储空间
p_address = new char[strlen(pa)+1];//申请存储空间
strcpy(p_address,pa);
strcpy(tel,t);
}
void CStudent::setnumber(int number1) //设置学号
{
number=number1;
}
void CStudent:: setschool(char *school)//设置院系
{
if(p_school ) delete [ ] p_school;//释放存储空间
p_school = new char[strlen(school)+1];//申请存储空间
strcpy(p_school,school);
}
void CStudent:: setaddress(char *address)//设置通讯地址
{
if(p_address ) delete [ ] p_address;//释放存储空间
p_address = new char[strlen(address)+1];//申请存储空间
strcpy(p_address,address);
}
void CStudent:: settel(char *mailnum)//设置电话
{
strcpy(tel,mailnum);
}
void CStudent:: show() //输出数据成员
{
cout<<"学号:"<<getnumber()<<endl;
cout<<"姓名:"<<getname()<<endl;
cout<<"学院:"<<getschool()<<endl;
cout<<"地址:"<<getaddress()<<endl;
cout<<"电话:"<<gettel()<<endl;
}
int main()
{
  CStudent obj(2004005,"张三","工学院算机系","四川雅安雨城区","012334415425");
  obj.show();
return 0;
}

[解决办法]
在你的构造函数中,没有为类CStudent中的数据成员赋初值,将你的构造函数修改如下就可以了:

C/C++ code
CStudent::CStudent(int un,char *pn,char *ps,char *pa,char t[]):p_name(NULL),p_school(NULL),p_address(NULL)//构造函数{number=un;if(p_name ) delete [ ] p_name; //释放存储空间p_name = new char[strlen(pn)+1]; //申请存储空间strcpy(p_name,pn);if(p_school ) delete [ ] p_school; //释放存储空间p_school= new char[strlen(ps)+1]; //申请存储空间strcpy(p_school,ps);if(p_address ) delete [ ] p_address; //释放存储空间p_address = new char[strlen(pa)+1]; //申请存储空间strcpy(p_address,pa);strcpy(tel,t);}
[解决办法]
char *p_name; //姓名
char *p_school; //院系
char *p_address; //通讯地址
这几个指针如果没有赋初值会指向一些不确定的位置(而不是NULL类型),如果对指向不确定位置的指针执行delete操作会出现不确定的问题。

指针使用一定要赋初值。

热点排行