自定义char * insert函数在多次运行时会产生运行时错误

时间:2017-11-21 14:57:11

标签: c++ pointers insert substr

我正在尝试创建自己的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");

1 个答案:

答案 0 :(得分:1)

插入调用不是mallocing新数组的大小。仅在第一个子调用中进行mallocing,最大为原始数组的大小