我在C ++中创建了一个自己的类String。
我有一个问题:
class String {
char* arr;
int len;
friend ostream& operator << (ostream& s, const String& c) {
return s << c.arr;
}
Public:
String() {
arr = NULL;
len = 0;
}
String(const char* name) {
*arr = *name;
}
}
主要是我有这个:
String *s = new String("abcde");
cout << *s << endl;
问题是编译器向我显示了这个:
总线错误:10
我正在使用带有g ++的终端处理mac。
我该如何解决这个问题?
提前致谢。
答案 0 :(得分:6)
此:
String(const char* name) {
*arr = *name;
// ^^^^
}
取消引用未初始化的指针,从而为您提供未定义的行为。我想你真正想要做的是这样的事情:
#include <cstring> // For strlen() and strcpy()
String(const char* name) {
len = strlen(name);
arr = new char[len + 1];
strcpy(arr, name);
}
另外,不要忘记为清理提供析构函数,复制构造函数和复制赋值运算符 - 如果在C ++ 11中工作,也可以使用移动构造函数和移动赋值运算符。