qq_54670823 2021-01-26 14:39 采纳率: 50%
浏览 402
已采纳

问问什么叫"不符合strcpy的规范" 这里应该怎么改

#define  _CRT_SECURE_NO_WARNINGS 
#include <iostream>
using namespace std;

//

class  Name
{
public:
    Name(const char* myp)
    {
        if (myp == 0)
            myp = "a";
        m_len = strlen(myp);
        m_p = (char*)malloc(m_len + 1); //
        strcpy(m_p, myp);
    }

    //Name obj2 = obj1;
    //解决方案: 手工的编写拷贝构造函数 使用深copy
    Name(const Name& obj1)
    {
        m_len = obj1.m_len;
        m_p = (char*)malloc(m_len + 1);
        strcpy(m_p, obj1.m_p);
    }

    ~Name()
    {
        if (m_p != NULL)
        {
            free(m_p);
            m_p = NULL;
            m_len = 0;
        }
    }
protected:
private:
    char* m_p;
    int m_len;
};

//对象析构的时候 出现coredump
void objplaymain()
{
    Name obj1("abcdefg");
    //Name obj2 = obj1;  //C++编译器提供的 默认的copy构造函数  浅拷贝
    Name obj3("obj3");

    obj3 = obj1;  // C++编译器提供的 等号操作 也属 浅拷贝
}

void main91()
{
    objplaymain();
    cout << "hello..." << endl;
    system("pause");
    return;
}

 

  • 写回答

2条回答 默认 最新

  • 镜中月ss 2021-01-26 15:35
    关注

    这个程序的主要原因不是这个,你的问题压根对程序不造成影响。主要原因在于你没有对赋值运算符进行重载,你不仅仅重写拷贝构造,而且还要重载赋值运算符

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常