【发布时间】:2012-09-26 18:07:24
【问题描述】:
我正在编写我的 String 类版本,但 Valgrind 抱怨我为我的字符串实现了 << 运算符。错误出现在错误的行,如果我按字符打印,效果很好。
我哪里错了?
Valgrind 错误:
==2769== 条件跳转或移动取决于未初始化的值
==2769== at 0x4C2AC28: strlen(在 /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so 中)
==2769== by 0x4ECAD60: std::basic_ostream >& std::operator(std::basic_ostream >&, char const*) (in /usr/lib/x86_64-linux-gnu/libstdc++ .so.6.0.17)
==2769== by 0x400BD5: operator
==2769== by 0x400AAC: main (main.cpp:12)
我的<< 字符串运算符:
ostream & operator << (ostream & o, String & inS) {
o << inS._pData << " "; // the wrong line
return o;
}
我的String 班级:
class String {
public:
unsigned _size;
char * _pData;
String();
String(const char* inCString);
};
构造函数(用于char*):
String::String(const char* inCString) {
_size = strlen(inCString);
_pData = new char[_size + 1];
strncpy(_pData, inCString, _size);
}
Main.cpp:
int main(int, char**) {
String s1("hello");
cout << s1;
return 0;
}
【问题讨论】:
-
请问您为什么要麻烦重新实现字符串?
-
你服从Rule of Three了吗?
-
@MooingDuck :是的,但不是整个代码都在这里;只有相关的。
-
@Benj :这是一个课堂作业;我们第一个月的cpp,为什么要你知道?
-
@Cqnqrd 课业是完全正当的理由,如果你要在生产代码中这样做,我会称你为疯子 ;-)
标签: c++ string valgrind cout strcpy