숙제를 위해 오버로드 된 String 클래스를 만들어야합니다.C++ 힙 손상으로 delete [] 및 overloaded + =
int main() {
MyString i;
cin >> i;
cin.ignore(100, '\n');
MyString temp = i;
while(!(i > temp)) {
temp += i;
cin >> i;
cin.ignore(100, '\n');
}
cout << endl << temp;
return 0;
}
MyString operator+= (const MyString& op1) {
_len += (op1._len);
char* temp = new char[_len+1];
strcpy(temp, _str);
strcat(temp, op1._str);
if(_str) {
delete [] _str;
_str = NULL;
}
_str = new char(_len+1);
strcpy(_str, temp);
return *this;
}
istream& operator>> (istream& inStream, MyString& in) {
char temp[TSIZE];
inStream >> temp;
in._len = strlen(temp);
if(in._str) {
delete [] in._str;
in._str = NULL;
}
in._str = new char[in._len+1];
strcpy(in._str, temp);
return inStream;
}
MyString(const MyString& from) {
_len = from._len;
if(from._str) {
_str = new char[_len+1];
strcpy(_str, from._str);
} else _str = NULL;
}
explicit MyString(const char* from) {
if(from) {
_len = strlen(from);
_str = new char[_len+1];
strcpy(_str, from);
} else {
_len = 0;
_str = NULL;
}
}
나는이 아주 새로운 여전히,하지만 분명히 문제가 + = 연산자는하지만, 처음되지라고 두 번째 발생 : 일부 사업자를 테스트하는 동안 나는 문제에 실행했다. 필요한 모든 정보를 제공하지 않으면 죄송합니다. 필요한 것 이상을 포함하고 싶지 않았습니다. 는 단일 문자를 할당하고 이상한 값으로 초기화되며,이 대신 대괄호 괄호를 사용하여 도움
널 포인터상의 delete []는 noop입니다. 'operator + ='의 널 체크는 이점을 제공하지 않습니다. – chris
새로운 작업으로 인해 예외가 발생하면 코드가 안전하지 않습니다. –