为了账号安全,请及时绑定邮箱和手机立即绑定

求助吗,关于拷贝构造函数出错的问题!

求助吗,关于拷贝构造函数出错的问题!

catspeake 2021-10-05 11:07:35
#include<iostream>using namespace std;class CAT{int * itsAge;public:CAT():itsAge(new int(5)){}CAT(const CAT& s){cout<<"copy"<<endl;int itsage;if(itsAge){*(this->itsAge) = *s.itsAge; }}~CAT(){delete itsAge;}int GetAge() const {return *itsAge;}void SetAge (int age){*itsAge=age;}};int main(){CAT frisky;cout<<"frisky's age:"<<frisky.GetAge()<<endl;cout<<"Setting frisky to 6...\n";frisky.SetAge(6);cout<<"Creating boots from frisky\n";CAT boots(frisky);cout<<"frisky's age:"<<frisky.GetAge()<<endl;cout<<"boot's age:"<<boots.GetAge()<<endl;cout<<"setting frisky to 7...\n";frisky.SetAge(7);cout<<"frisky's age:"<<frisky.GetAge()<<endl;cout<<"boots' age:"<<boots.GetAge()<<endl;}
查看完整描述

1 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

复制构造函数没有为itsAge分配空间

同样也没有被itsAge分配初始值

导致itsAge在执行复制构造时为随机值

对随机值地址赋值 导致程序崩溃


修改为


 CAT(const CAT& s){  cout<<"copy"<<endl;  int itsage;  //if(itsAge){*(this->itsAge) = *s.itsAge; }  itsAge = new int(*s.itsAge); }


查看完整回答
反对 回复 2021-10-10
  • 1 回答
  • 0 关注
  • 206 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信