메모리 관리 : 문자 배열 및 = 연산자메모리 관리 : 문자 배열 및 = 연산자
Q. 메모리 관리 측면에서 다음 코드로 어떤 오류가 있습니까?
class String
{
public:
String(const char right[]);
String& operator= (const String& right);
int length() const;
private:
char* buffer;
int len;
};
int String::length() const {return len;}
String::String(const char right[])
{
len = 0;
while (right[len] != '\0')
len++;
buffer = new char[len+1];
for (int i = 0; i < len; i++)
buffer[i] = right[i];
buffer[len] = '\0';
}
String& String::operator= (const String& right)
{
int n = right.length();
for (int i = 0; i <= n; i++)
buffer[i] = right.buffer[i];
return *this;
}
답변. 실마리가 없습니다 ... 저를 도울 수 있습니까? 배열 크기가 괜찮은 것 같습니다 ... new 연산자 ... 삭제 연산자가 없기 때문에 매달린 포인터 때문입니까? 또는 3의 규칙?
귀하의 도움에 감사드립니다. 알려 주시기 바랍니다. 코드가있는 방법이 없기 때문에 감사합니다,
[Rule of Three] (http://en.wikipedia.org/wiki/Rule_of_three_ (C % 2B % 2B_programming))가 구현되어 있지 않습니다. 즉, 발생하기를 기다리고있는 오류를 의미합니다. 대입 연산자는 구현시 매우 모호합니다. 생성자, 나쁘지는 않지만 여전히 보석은 아닙니다. 마지막으로 소멸자가 없습니다. 이는 메모리 누수 팩토리가 그 밖의 모든 것의 맨 위에 있다는 것을 의미합니다. – WhozCraig
'operator ='는 버퍼 오버 플로우가 일어나기만을 요구하며, 소멸자도 복사 할당 연산자도 없습니다 ... – Yuushi
명백한 정말 나쁜 것 외에도 생성자에서 문자열 길이를 수동으로 계산할 필요가 없습니다. 또는 수동 복사를위한 것입니다. –