C++,野指针
#include<iostream.h>#include<string.h>classStudent{public:Student(char*n,char*st,intn...
#include<iostream.h>
#include<string.h>
class Student{
public:
Student(char *n,char *st,int num,char *sc)
{
name=new char[strlen(n)+1];
stuno=new char[strlen(st)+1];
name=n;
stuno=st;
score_num=num;
score=sc;
}
~Student()
{
delete []name;
delete []stuno;
}
double GetSum()
{
double s=0;
int i;
for(i=0;i<score_num;i++)
{
s=s+*(score+i);
}
return s;
}
double GetAver()
{
double aver=GetSum()/(score_num*1.0);
return aver;
}
double GetMax()
{
double max=*score;
int i ;
for(i=0;i<score_num;i++)
{
if(*(score+i)>=max)
{
max=*(score+i);
}
}
return max;
}
double GetMin()
{
double min=*score;
int i;
for(i=0;i<score_num;i++)
{
if(*(score+i)<=min)
{
min=*(score+i);
}
}
return min;
}
void Show()
{
cout<<"姓名:"<<name<<endl;
cout<<"学号:"<<stuno<<endl;
cout<<"总成绩"<<GetSum()<<endl;
cout<<"平均分:"<<GetAver()<<endl;
cout<<"最高分:"<<GetMax()<<endl;
cout<<"最低分:"<<GetMin()<<endl;
}
private:
char *name;//学生姓名
char *stuno;//学生学号
int score_num;//学生课程的数量
char *score;//学生成绩,是一个数组
};
int main()
{
char n[10];
char st[10];
int num;
cout<<"请输入学生的姓名"<<endl;
cin>>n;
cout<<"请输入学号"<<endl;
cin>>st;
cout<<"请输入科目数"<<endl;
cin>>num;
char *sc;
sc= new char[num+1];
cout<<"请输入各科成绩"<<endl;
cin>>sc;
Student stu1(n,st,num,sc);
stu1.Show();
delete sc;
return 0;
}
运行时总成绩出错,而且出现了野指针的提示,这是哪的问题啊 展开
#include<string.h>
class Student{
public:
Student(char *n,char *st,int num,char *sc)
{
name=new char[strlen(n)+1];
stuno=new char[strlen(st)+1];
name=n;
stuno=st;
score_num=num;
score=sc;
}
~Student()
{
delete []name;
delete []stuno;
}
double GetSum()
{
double s=0;
int i;
for(i=0;i<score_num;i++)
{
s=s+*(score+i);
}
return s;
}
double GetAver()
{
double aver=GetSum()/(score_num*1.0);
return aver;
}
double GetMax()
{
double max=*score;
int i ;
for(i=0;i<score_num;i++)
{
if(*(score+i)>=max)
{
max=*(score+i);
}
}
return max;
}
double GetMin()
{
double min=*score;
int i;
for(i=0;i<score_num;i++)
{
if(*(score+i)<=min)
{
min=*(score+i);
}
}
return min;
}
void Show()
{
cout<<"姓名:"<<name<<endl;
cout<<"学号:"<<stuno<<endl;
cout<<"总成绩"<<GetSum()<<endl;
cout<<"平均分:"<<GetAver()<<endl;
cout<<"最高分:"<<GetMax()<<endl;
cout<<"最低分:"<<GetMin()<<endl;
}
private:
char *name;//学生姓名
char *stuno;//学生学号
int score_num;//学生课程的数量
char *score;//学生成绩,是一个数组
};
int main()
{
char n[10];
char st[10];
int num;
cout<<"请输入学生的姓名"<<endl;
cin>>n;
cout<<"请输入学号"<<endl;
cin>>st;
cout<<"请输入科目数"<<endl;
cin>>num;
char *sc;
sc= new char[num+1];
cout<<"请输入各科成绩"<<endl;
cin>>sc;
Student stu1(n,st,num,sc);
stu1.Show();
delete sc;
return 0;
}
运行时总成绩出错,而且出现了野指针的提示,这是哪的问题啊 展开
展开全部
因为用的平板,没法实测,所以只为楼主提供一些建议:
1.不要使用iostream.h使用iostream,前者不是标准库。
2.代码风格有点乱,建议去可以看一下code craft这本书,很有帮助的。
3.UB行为有点多,还有一些小细节的疏漏,比如main里面delete sc应是[]sc,cin>>sc也有问题。
4.对于野指针可以使用const char*来排错,或者找到有对指针直接操作的地方,检查是否有破坏指针的行为,
5.对于内存,请加上try catch来捕捉分配内存失败的情况,释放以后把指针置为NULL,防止出现野指针。这是良好的习惯。
6.最后,不要把函数全部写成内联函数,这个习惯很不好,虽然编译器有检查哪些适合当内联哪些不适合的功能,但是这不是坏习惯的借口。内联函数不要带循环,而且最好不要超过5行,可以类比c的宏。
不好意思没法帮你实际解决问题,不过希望这些建议对你有用。
1.不要使用iostream.h使用iostream,前者不是标准库。
2.代码风格有点乱,建议去可以看一下code craft这本书,很有帮助的。
3.UB行为有点多,还有一些小细节的疏漏,比如main里面delete sc应是[]sc,cin>>sc也有问题。
4.对于野指针可以使用const char*来排错,或者找到有对指针直接操作的地方,检查是否有破坏指针的行为,
5.对于内存,请加上try catch来捕捉分配内存失败的情况,释放以后把指针置为NULL,防止出现野指针。这是良好的习惯。
6.最后,不要把函数全部写成内联函数,这个习惯很不好,虽然编译器有检查哪些适合当内联哪些不适合的功能,但是这不是坏习惯的借口。内联函数不要带循环,而且最好不要超过5行,可以类比c的宏。
不好意思没法帮你实际解决问题,不过希望这些建议对你有用。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询