2012-07-17 2 views
0

valgrind를 사용하여 다음 함수에서 크기가 잘못 읽었습니다. 나는 왜 그런지 잘 모르겠지만 아무도 나를 도울 수 있다면 크게 감사 할 것입니다! 내가 말할 수있는 것은 괜찮습니다.하지만 여전히 메모리 할당과 할당 해제를 처리 할 수있는 오류가 있습니다. 도와주세요!valgrind에서 크기가 잘못 읽고 쓰여졌습니다.

//alternate constructor that allows for setting of the inital value of the string 
MyString::MyString(const char *message) 
{ 
    int counter(0); 
    while(message[counter] != '\0') 
    { 
      counter++; 
    } 
    Size = counter; 
    **String = new char [Size];** 
    for(int i=0; i < Size; i++) 
      String[i] = message[i]; 

} 


istream& operator>>(istream& input, MyString& rhs) 
{ 
    char* t; 
    int size(256); 
    t = new char[size]; 
    input.getline(t,size); 

    **rhs = MyString(t);** 
    delete [] t; 

    return input; 
} 



/*Assignment operator (=) which will copy the source string into the destination string. Note that size of the destination needs to be adjusted to be the same as the source. 
*/ 

    MyString& MyString::operator=(const MyString& rhs) 
{ 
    if(this != &rhs) 
    { 
      delete [] String; 
      **String = new char[rhs.Size+1];** 
      Size = rhs.Size; 

      for(int i = 0; i < Size; i++) 
      { 
        ** String[i] = rhs.String[i];** 
      } 
    } 

    return *this; 
} 

제안 사항 ?? (모든 문제 줄에는 **이 있습니다.)

+0

정확히 어느 라인에서? –

+0

그 정보를 게시 했어야합니다. 특정 방법으로 강조 표시된 특정 줄을 사용하여 질문을 편집합니다. 죄송합니다! – user1363061

답변

0

복사 생성자가 \0의 공간을 할당하지 않고 복사하지 않는다는 것을 알았습니다. 대입 연산자도 마찬가지입니다. 끝내는 0을 저장하지 않으면, 왜 그것을 찾고 있습니까?

두 가지 구현이 서로 다른 이유는 왜 불일치 (크기 대 카운터)입니까?

"내가 잘할 수 있다고 말하면 괜찮습니다."- 정의되지 않은 행동 또는이 경우 행운이라고합니다. 또는 저를 좋아하고 버그를 잡으려고한다면 : 불행입니다.

+0

대단히 감사합니다! 복사 생성자를 테스트하여 \ 0을 복사했는지 확인하고 표시했습니다. 복사 된 문자열은 Hello World 여야하며 10자를 가지고 11 자 색인을 가져 와서 nul 문자로 사용하십시오. 나는 cout을 사용하여 그것을 테스트했다. << String [11] << endl; 공백을 인쇄했습니다. String [12]을 사용할 때 그것은 무작위 문자를 주었고, 그래서 그것이 nul을 복사했다고 추측하고있었습니다. 그걸로, 내가 어떻게 그걸 복사했는지 확신 할 수 있니? – user1363061

+0

그들은 정확히 어떻게 다릅니 까? 나는 크기가 카운터와 같은 곳으로 만들고 있다고 생각 했단 말인가? 나는 코드를 작성하는 동안 자신보다 앞섰을 수도 있다고 생각한다. – user1363061

+0

복사하지 않았 으면 적절한 테스트를 수행하십시오. –

관련 문제