0

我在使用 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;
 }

有什么建议么??(所有问题行都有**)

4

1 回答 1

0

我看到的一件事是您的复制构造函数没有为它分配空间,\0也没有复制它。赋值运算符也没有。或者,如果您不存储终止零,那么您为什么要寻找它?

并且这两种实现方式不同,为什么不一致(大小与计数器)?

“据我所知,它运行良好” - 这被称为未定义的行为,或者在这种情况下:运气 - 或者,如果你喜欢我,并且喜欢捕捉错误:不幸。

于 2012-07-17T15:24:47.303 回答