求各位C++大神为菜鸟看一个小程序

程序代码如下://gouzaohanshuchongzaijixigouhanshuzuoyong.cpp:Definestheentrypointfortheconso... 程序代码如下:
// gouzaohanshuchongzaijixigouhanshuzuoyong.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "iostream.h"
#include "string.h"
const char *null=" ";//符号常量的定义
class Student
{
public:
Student();//无参构造函数的声明
Student(char* pname,char sex,char* pid,int a,float s);//带参构造函数声明
void getid(char* pid);//内联成员
void getname(char* pname);
void getsex(char sex1){sex=sex1;}
void getage(int a){age=a;}
void getscore(float s){score=s;}
void display();
~Student();//析构函数声明
private:
char* name;
char sex;
char* id;
int age;
float score;
};
Student::Student()
{
id=new char[10];//动态创建字符串
strcpy(id,"00000000");//动态申请内存
name=new char[20];
strcpy(name,null);
sex=' ';
age=0;
score=0;
}
Student::Student(char* pname,char sex1,char* pid,int a,float s)//带参构造函数的实现
{
id=new char[strlen(pid)+1];//动态申请内存单元
strcpy(id,pid);
name=new char[strlen(pname)+1];
strcpy(name,pname);
sex=sex1;
age=a;
score=s;
}
void Student::getid (char* pid)
{
delete[] id;
id=new char[strlen(pid)+1];
strcpy(id,pid);
}
void Student::getname (char* pname)
{
delete[] pname;
id=new char[strlen(pname)+1];
strcpy(name,pname);
}
void Student::display ()
{
cout<<"name:"<<name<<endl;
cout<<"id:"<<id<<endl;
cout<<"age:"<<age<<endl;
cout<<"sex:"<<sex<<endl;
cout<<"score:"<<score<<endl;
cout<<endl;
}
Student::~Student ()
{
delete[] name;//释放用new申请的内存单元
delete[] id;//将字符串所占用的空间全部释放掉
}
int main(int argc, char* argv[])
{
Student s1;//调用无参数构造函数创建对象s1
s1.display ();
s1.getid ("2011301");
s1.getname ("ZouMei");
s1.getsex ('F');
s1.getage (22);
s1.getscore (90);
s1.display ();
Student s2("LuLu",'F',"2011302",22,90);//通过调用带参数构造函数创建对象s2
s2.display ();
return 0;
}

运行后有点错。
展开
 我来答
当年兔子
2013-10-01 · 超过19用户采纳过TA的回答
知道答主
回答量:46
采纳率:100%
帮助的人:32.6万
展开全部
void Student::getname (char* pname)
{
delete[] pname;
id=new char[strlen(pname)+1];
strcpy(name,pname);
}
错在这了
首先 第一句 你delete了 传递参数的指针“pname”,后面再用到pname时必然出错,应该改为 “name”,还有就是第二句的“id” 同样应该改为“name”,因为这里是要对name进行内存动态分配 。
所以下面的是正确的写法

void Student::getname (char* pname)
{
delete[] name;
name=new char[strlen(pname)+1];
strcpy(name,pname);
}

同样作为一个菜鸟,建议你一下:指针声明后要马上进行初始化,没有指向任何内容时要赋空值,也就是说在构造函数里赋值NULL,delete后同样赋值NULL;delete时尽量先加个判断,若不是NULL再delete。这些小的习惯会对以后的编程有很大的帮助,可以让你省去很多不必要的麻烦。当然如果你只是为了应付考试那就算了,当我没说。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友b0c2396
2013-10-01 · TA获得超过123个赞
知道小有建树答主
回答量:160
采纳率:100%
帮助的人:141万
展开全部
哪错? 错误提示是什么?
更多追问追答
追问
是运行结果有错 ,给对象的成员赋值好像没有成功,我是菜鸟 能不能帮我看下,程序要实现的意思你应该很容易看懂吧
追答
delete[]  你每次都释放 怎么会赋值成功
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式