weixin_44826062
moon19961996
采纳率86.7%
2019-04-12 16:05 阅读 386

运算符重载之后,析构函数报错,怎么改?顺便说一下原因,谢谢

10
 class String
{
public:

    String(const char* a=NULL);
    String(const String&a);
    ~String();
    void operator=(const char* a);
    void operator=(String &a);
    String operator+(const char* a);
    String operator+(String a);
    void operator<(const char* a);
    void operator<(String a);
    void operator>(const char* a);
    void operator>(String a);
    void print();

private:
    char *m_str;
};

String String::operator+(const char* a)
 {
    String c;
    c.m_str = new char[strlen(a) + strlen(m_str) + 1];
    int i = 0;
    for (; i < strlen(m_str); i++)
    {
        c.m_str[i] = m_str[i];
    }
    for (int t = 0; t < strlen(a); t++)
    {
        c.m_str[i] = a[t];
    }

    return c;
 }

String String::operator+(String a)
 {
    String c;
    c.m_str = new char[strlen(a.m_str) + strlen(m_str) + 1];
    int i = 0;
    for (; i < strlen(m_str); i++)
    {
        c.m_str[i] = m_str[i];
    }

    for (int t = 0; t <=strlen(a.m_str); t++,i++)
    {
        c.m_str[i] = a.m_str[t];
    }


    return c;
 }

 void String::operator<(const char* a)
 {

 }

 void String::operator<(String a)
 {

 }

 void String::operator>(const char* a)
 {

 }

 void String::operator>(String a)
 {

 }


 String::String(const char* a)
 {
     if (a == NULL)
     {
         m_str = new char[1];
         m_str[0] = '\0';
     }
     else
     {
         int b = strlen(a);
         m_str = new char[b+1 ];
         strcpy_s(m_str,b+1,a);
     }
 }

 String::String(const String&a)
 {
     int b = strlen(a.m_str);
     m_str = new char[b + 1];
     strcpy_s(m_str, b + 1, a.m_str);
 }

 String::~String()
 {
     printf("析构%s",this->m_str);
     delete[]m_str;
     m_str = NULL;
 }

 void String::operator=(const char* a)
 {
     int b = strlen(a);
     m_str = new char[b + 1];
     strcpy_s(m_str, b + 1, a);
 }

 void String::operator=(String& a)
 {
     int b = strlen(a.m_str);
     m_str = new char[b + 1];
     strcpy_s(m_str, b + 1, a.m_str);
 }


void String::print()
{
    cout<<m_str<<endl;
}

int main()
{
    String s1 = "abc";
    String s2 ("def");
    String s3 =s1;
    String s4 = s1+s3;


    s1.print();
    s2.print();
    s3.print();
    s4.print();

    return 0;
}

String s4 = s1+s3;这一行会调用析构函数,释放内存的时候会弹出系统的debug窗口!
图片说明

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • 已采纳
    d2262272d 窝米逗佛~ 2019-04-12 16:50

    额,路过看到了,说一下你的错误原因,内存申请的太小,然后又越界使用了 ,最后在释放的时候就出问题了, 改的话...你自己改改看吧 , 不行就等其他人来帮你整了

    点赞 评论 复制链接分享
  • biyanqing01 代码也可以升级为艺术 2019-04-12 16:54

    写成delete m_str;试试

    点赞 评论 复制链接分享

相关推荐