//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 ©)
{
mString = new char[copy.mLength];
int i;
for(; i < copy.mLength; i++)
{ mString[i] = copy.mString[i]; }
mString[i] = '\0';
mLength = copy.mLength;
}
最佳答案
您正在使用未初始化的变量,该变量为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];
为您留出空终止符的空间。