求大神指教,跪求为什么下面的c++程序崩溃了?我估计是动态分配的问题。。
*************************************************该程序想实现未知数目的实例student信息的存储和输出student的...
*************************************************该程序想实现未知数目的实例student信息的存储和输出
student的父类是cdate 为什么运行会崩溃??
跪求大神带!感激不尽啊!!
*************************************************
#include <iostream>
#include<string.h>
#include<malloc.h>
using namespace std;
class cdate{
int year;
int month;
int day;
public:
cdate(int y=0,int m=0,int d=0){year=y;month=m;day=d;}
void set_date()
{cout<<endl;
cin>>year;
cin>>month;
cin>>day;
}
int get_year(){return year;}
int get_month(){return month;}
int get_day(){return day;}
void display(){
cout<<year<<"年"<<month<<"月"<<day<<"日"<<endl;
}
};
class student:public cdate
{
string sn;
string name;
int grade;
public:
student(){};
student(int y,int m,int d,string SN,string NAME,int g):cdate(y,m,d)
{
sn=SN;
name=NAME;
grade=g;
}
void set_student()
{
cout<<"学号,姓名,成绩,入学日期"<<endl;
cin>>sn;
cin>>name;
cin>>grade;
set_date();
}
void display();
};
void student::display()
{
cout<<"学号:"<<sn<<endl;
cout<<"姓名:"<<name<<endl;
cout<<"成绩:"<<grade<<endl;
cout<<"入学日期:";
cdate::display();
}
int main(){
int j=1,i;
int n;
student r;
student *p;
r[1].set_student();
cout<<"1.添加0.结束"<<endl;
p=r;
cin>>n;
while(n!=0)
{
j++;
p=(student *)realloc(p,j*sizeof(student));//想实现一个可改变大小的实例存储
(p+j-1)->set_student();
cin>>n;
}
for(i=0;i<j;i++,p++)
p->display();
return 0;
} 展开
student的父类是cdate 为什么运行会崩溃??
跪求大神带!感激不尽啊!!
*************************************************
#include <iostream>
#include<string.h>
#include<malloc.h>
using namespace std;
class cdate{
int year;
int month;
int day;
public:
cdate(int y=0,int m=0,int d=0){year=y;month=m;day=d;}
void set_date()
{cout<<endl;
cin>>year;
cin>>month;
cin>>day;
}
int get_year(){return year;}
int get_month(){return month;}
int get_day(){return day;}
void display(){
cout<<year<<"年"<<month<<"月"<<day<<"日"<<endl;
}
};
class student:public cdate
{
string sn;
string name;
int grade;
public:
student(){};
student(int y,int m,int d,string SN,string NAME,int g):cdate(y,m,d)
{
sn=SN;
name=NAME;
grade=g;
}
void set_student()
{
cout<<"学号,姓名,成绩,入学日期"<<endl;
cin>>sn;
cin>>name;
cin>>grade;
set_date();
}
void display();
};
void student::display()
{
cout<<"学号:"<<sn<<endl;
cout<<"姓名:"<<name<<endl;
cout<<"成绩:"<<grade<<endl;
cout<<"入学日期:";
cdate::display();
}
int main(){
int j=1,i;
int n;
student r;
student *p;
r[1].set_student();
cout<<"1.添加0.结束"<<endl;
p=r;
cin>>n;
while(n!=0)
{
j++;
p=(student *)realloc(p,j*sizeof(student));//想实现一个可改变大小的实例存储
(p+j-1)->set_student();
cin>>n;
}
for(i=0;i<j;i++,p++)
p->display();
return 0;
} 展开
3个回答
展开全部
student r;
student *p;
r[1].set_student(); ====>为什么是r[1] ?
另外,如果用realloc的话,p事先要用malloc申请
你的程序中p指向了r,但r的位置在栈里,realloc要从堆上申请分配内存,二者不可比。所以我估计这句p=(student *)realloc(p,j*sizeof(student)是有问题的。
解决办法是一开始就让p用malloc申请动态内存,然后根据输入n,调用realloc动态调整
student *p;
r[1].set_student(); ====>为什么是r[1] ?
另外,如果用realloc的话,p事先要用malloc申请
你的程序中p指向了r,但r的位置在栈里,realloc要从堆上申请分配内存,二者不可比。所以我估计这句p=(student *)realloc(p,j*sizeof(student)是有问题的。
解决办法是一开始就让p用malloc申请动态内存,然后根据输入n,调用realloc动态调整
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询