私は自分のバージョンの String クラスをコーディングしていますが、Valgrind<<
は私の文字列に対する演算子の実装について不満を漏らしています。エラーは間違った行にあります.charごとに印刷するとうまくいきます.
どこが間違っていますか?
Valgrind エラー:
==2769== 条件付きジャンプまたは移動は、初期化されていない値に依存します
==2769== 0x4C2AC28: strlen (/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so 内)
==2769== by 0x4ECAD60: std::basic_ostream >& std::operator<< >(std::basic_ostream >&, char const*) (/usr/lib/x86_64-linux-gnu/libstdc++.so. 内) 6.0.17)
==2769== by 0x400BD5: operator<<(std::ostream&, String&) (string.cpp:22)
==2769== by 0x400AAC: メイン (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;
}