VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 260|回复: 3

36课的小作业,按照答案做了还是崩溃,求解答

[复制链接]
26_avatar_middle
最佳答案
0 
在线会员 发表于 2019-10-10 11:43:32 | 显示全部楼层 |阅读模式
#include <iostream>
#include <string>
using namespace std;
class CStudent
{
public:
        char * p_name;
        char sex;
        int num;
        int age;
        CStudent();
        CStudent(char* pname, char t_sex, int t_num, int t_age);
        ~CStudent();
        CStudent(CStudent& stud);
        };
CStudent::CStudent(CStudent& stud)//拷贝构造函数,博主syc的答案
{
        int dst_name_len = 0;
        if (stud.p_name) dst_name_len = strlen(stud.p_name);
        this->p_name = NULL;
        if (dst_name_len > 0)
{
        this->p_name = new char[dst_name_len + 1];
        memset(this->p_name, 0, dst_name_len + 1);
        strcpy(this->p_name, stud.p_name);
}
        this->sex = stud.sex;
        this->num = stud.num;
        this->age = stud.age;
}
CStudent::CStudent(char* pname, char t_sex, int t_num, int t_age) :sex(t_sex), num(t_num), age(t_age)//构造函数
{
    int len=strlen(pname);
        p_name=new char(len+1);
        memset(p_name,0,(len+1));
        strcpy(p_name, pname);
}
CStudent::~CStudent()//析构函数
{
        if(p_name)
        {
        delete [] p_name;
        }
}
int main()
{
        CStudent stu1("aaa",'f',50,12);
        CStudent stu2(stu1);
        return 0;
}




上一篇:实用C++课后习题疑惑
下一篇:这是编译器的问题吗?
33_avatar_middle
最佳答案
0 
在线会员 发表于 2019-10-10 16:08:37 | 显示全部楼层
你申请了两个对象,所以析构函数执行两次,delete执行第二次的时候,申请的空间在第一次就释放了,所以第二次delete会报错

评分

参与人数 1驿站币 +1 热心值 +1 收起 理由
82_avatar_small love_cctry + 1 + 1 很给力!

查看全部评分

38_avatar_middle
最佳答案
0 
在线会员 发表于 2019-10-10 16:26:56 | 显示全部楼层
31行:strcpy_s(this->p_name, dst_name_len + 1, stud.p_name);

40行:
p_name = new char[len + 1];
memset(p_name, 0, (len + 1));
strcpy_s(p_name, len + 1, pname);

评分

参与人数 1驿站币 +1 热心值 +1 收起 理由
82_avatar_small love_cctry + 1 + 1 很给力!

查看全部评分

26_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2019-10-10 21:00:00 | 显示全部楼层
感谢,感谢
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-9-24 15:19

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表