【发布时间】:2014-07-06 14:22:43
【问题描述】:
我需要使用此 (*) 运算符将字符串乘以 X 次。例如:
String a = "First";
String b = a*2; // then b = "FirstFirst"
但它崩溃了。最奇怪的是,它时不时地崩溃。几次它工作,然后崩溃。
所以这是我的字符串类:
class String {
int len;
char *str;
public:
String () {
len = 0;
str = NULL;
}
String(const char *);
String(const String &);
~String() {
delete [] str;
}
String operator++(int notused);
String & operator =(const String &);
friend int operator == (const String &, const String &);
friend ostream & operator <<(ostream &, const String &);
friend istream & operator >>(istream &, const String &);
friend String operator*(const String & s1, int x);
friend String operator*(int x, const String & s1);
};
这里是 * 运算符和一些构造函数的重载:
String::String(const char * ptr)
{
str = new char [(len = strlen(ptr)) + 1];
strcpy(str, ptr);
}
String::String(const String & s)
{
str = NULL;
if(len = s.len){
str = new char [len + 1];
strcpy(str, s.str);
}
}
String operator*(const String & s1, int x)
{
String result = s1;
result.str = new char[(s1.len)*x];
strcpy (result.str, s1.str);
result.len = x*s1.len;;
for (int i = 0; i < (x-1); i++)
{
strcat (result.str, s1.str);
}
return result;
}
首先我检查了字符串的长度。但他们还好(我认为),那有什么问题呢?
所以,我用以下几行分配了新内存:
String result = s1;
result.str = new char[(s1.len)*x];
它适用于从 0 到 7 的数字。在 8 时它会崩溃。一切都与大小有关。如果我乘双 X 倍:
result.str = new char[(s1.len)*x*x];
然后我就可以跨越 8 道关卡了。有时我会看到 bad_alloc 错误。
【问题讨论】:
-
你试过使用调试器吗?
-
“但他们还好(我认为)” - 为什么是“我认为”?您的调试器会告诉您所有相关信息,因此您不必怀疑自己的想法。
-
目前我正在阅读如何使用它们,但我想,这可能是有人有类似的问题,所以我发布了这个问题。
标签: c++ string memory operator-overloading