내 String 버전의 코드를 코딩 중이지만 Valgrind는 내 문자열에 <<
연산자를 구현 한 것에 대해 우레 소리를 들었습니다. 오류는 에서 잘못된 줄입니다. char로 인쇄 할 경우 큰 효과가 있습니다.조건부 점프 valgrind with char * 및 << 연산자
어디서 잘못 되었나요?
Valgrind의 오류 :
ostream & operator << (ostream & o, String & inS) {
o << inS._pData << " "; // the wrong line
return o;
}
내 String
클래스 : (char*
에 대한)
class String {
public:
unsigned _size;
char * _pData;
String();
String(const char* inCString);
};
생성자 :
문자열 이==2769== Conditional jump or move depends on uninitialised value(s)
==2769== at 0x4C2AC28: strlen (in /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<<(std::ostream&, String&) (string.cpp:22)
==2769== by 0x400AAC: main (main.cpp:12)
내 <<
연산자
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;
}
문자열을 다시 구현해야하는 이유는 무엇입니까? – Benj
[Rule of Three] (http://en.wikipedia.org/wiki/Rule_of_three_ (C % 2B % 2B_programming))에 복종 했습니까? –
@MooingDuck : 그래,하지만 전체 코드는 여기에 없다. 관련된 것만 – bagage