我正在尝试创建自己的String类,它叫做MyString。我有很少的字符串操作功能。除插入函数外,它们都有效。当我多次使用插入功能时,程序崩溃(source.exe已停止工作)。我目前正在使用Dev C ++。
MyString MyString::insert(MyString s2, int pos) {
int size = strlen(this->getptr());
if(pos > size || pos < 0){
return "Error";
}
char * ptrLeft = this->substr(0, pos);
char * ptrRight = this->substr(pos, size - pos);
strcat(ptrLeft, s2.getptr());
strcat(ptrLeft, ptrRight);
return ptrLeft;
}
这是MyString类中的substr()函数:
char * MyString::substr(int position, int length) {
char* otherString = 0;
otherString = (char*)malloc(length + 1);
memcpy(otherString, &this->getptr()[position], length);
otherString[length] = 0;
return otherString;
}
参数化构造函数(char * ptr是私有成员):
MyString::MyString(char* str){
int size = strlen(str);
ptr = new char[size];
ptr = str;
}
如果我多次执行以下操作,有时会崩溃。
buff = buff.insert(" Text", 5);
cout << buff;
system("PAUSE");
buff = buff.insert(" Text", 5);
cout << buff;
system("PAUSE");
答案 0 :(得分:1)
插入调用不是mallocing新数组的大小。仅在第一个子调用中进行mallocing,最大为原始数组的大小