试图解决复制构造函数崩溃问题

时间:2015-11-19 05:27:07

标签: c++

我一直试图对此代码进行问题排查,但无济于事。它就像我调用复制构造函数一样崩溃了。在调用复制构造函数的其他尝试中,新对象的输出是随机字符。

我觉得我对内存管理缺乏了解也会导致$scope运算符过载。

这是我的复制构造函数....

=

这是我的重载MyString::MyString(const MyString& obj) { delete [] str; int temp=obj.len; len = temp; str = new char[len]; for (int i = 0; i < len; i++) { char temp=obj.str[i]; str[i] = temp; } } ....

=

在main方法中我像这样调用复制构造函数......

MyString& MyString::operator=(const MyString& obj)
{
    delete [] str;
    int temp = obj.len;

    len = temp;    
    str = new char[len];

    for ( int i = 0; i<=len; i++)
    {    
        char temp = obj.str[i];
        str[i] =  temp;
    }
    str[len] = '\0';

    return *this;
}

任何人都可以建议我出错的地方吗?

1 个答案:

答案 0 :(得分:3)

该行

delete [] str;
复制构造函数中的

是不对的。在该行之前未初始化str。如果没有删除所有问题,删除该行应该有帮助。

此外,您可能需要再分配一个对象而不是len,并且null终止str

  str = new char[len+1];  // Need +1

  ...

  str[len] '\0';

您还需要在分配操作员功能中将呼叫更改为new char[]。你需要:

  str = new char[len+1];