//prototype
 void Split(char c, vector <MyString> &outputVector) const

 //partial code inside split function
 // create new MyString object to push into output vector
 MyString substr;
 substr.mString = newString;
 substr.mLength = size;

 // push new item
 outputVector.push_back(substr);


我越过outputVector.push_back()行后,将不保留mString数据成员。

//I have two constructors
MyString()
{
    mString = NULL;
    mLength = 0;
}

/*************************************************
 * MyList copy constructor
 * creates a deep copy of a MyString item
 ************************************************/
MyString(const MyString &copy)
{
    mString = new char[copy.mLength];
    int i;

    for(; i < copy.mLength; i++)
    { mString[i] = copy.mString[i]; }

    mString[i] = '\0';
    mLength = copy.mLength;

}


c&#43;&#43; - push_back结构到 vector-LMLPHP

最佳答案

您正在使用未初始化的变量,该变量为undefined behavior

int i;

for(; i < copy.mLength; i++)


这里我们不知道i是什么,因此任何事情都可以发生,但是i可能比copy.mLength大,因此我们永远不会进入for循环。为了获得正确的行为,请将i设置为0,例如

int i = 0;


您还有另一个问题

mString[i] = '\0';


当我们到达该行i == copy.mLength时,但数组的大小仅为copy.mLength,因此我们末了一位,因为数组基于0索引。您最有可能需要将分配更改为

mString = new char[copy.mLength + 1];


为您留出空终止符的空间。

09-06 11:24