我一直试图对此代码进行问题排查,但无济于事。它就像我调用复制构造函数一样崩溃了。在调用复制构造函数的其他尝试中,新对象的输出是随机字符。
我觉得我对内存管理缺乏了解也会导致$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;
}
任何人都可以建议我出错的地方吗?
答案 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];