运算符重载之后,析构函数报错,怎么改?顺便说一下原因,谢谢
 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
潇潇-易水 回复weixin_44826062:简单来说就是你使用了不该你使用的内存,然后导致释放的时候,释放了野内存,唔..大概是这样,相当于释放野指针
一年多之前 回复
d2262272d
潇潇-易水 回复weixin_44826062: 额,打个比方嘛,好比某人让你用一个容量1斤的杯子大杯水,这个杯子虽然有空余,但是标准容量只有那么多,结果你玩杂技,装的水都高出杯面了,你说这个是不是不对嘛
一年多之前 回复
weixin_44826062
moon19961996 确实是内存错了,要把+1改成+4,额,可是我有点不懂原理,能简单说一下嘛
一年多之前 回复

写成delete m_str;试试

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问