CPP中字符串的内存管理问题

Memory management issue with string in CPP

本文关键字:管理 问题 内存 字符串 CPP      更新时间:2023-10-16

我正在尝试将填充' '的字符串分开,并将其存储在数组中。为此,我编写了如下代码

string* componentsOfStringSeperatedBystring(string originalString, string stringCompare){
string *arryOfStrings=NULL;
string *tempArrayString = NULL;
for (int i=0; i<originalString.length(); i++) {

    size_t position = originalString.find(stringCompare);
    cout << "nposition" <<position;
    if (position == originalString.npos) {
        break;
    }
    size_t subStringLength = originalString.length() - position;
    cout << "nsubStringLength" <<subStringLength;
    string subString = originalString.substr(0,position);
    cout << "nsubString" <<subString;
    tempArrayString = (string*)realloc(arryOfStrings, (i+1)*sizeof(string));
    cout << "n i t" <<i;
    if (tempArrayString != NULL) {
        arryOfStrings = tempArrayString;
        arryOfStrings[i] = subString;
    }

    cout << "narryOfStrings" <<arryOfStrings;
    originalString = originalString.substr(position+1,subStringLength);
}
return arryOfStrings;
}

我在"arryOfStrings[I] = subString;"上崩溃了,如果我只是先分配足够的空间,然后不重新分配,我就不会崩溃

不要在c++风格的对象上使用C风格的内存管理。要么完全采用C风格(使用以空结尾的char*字符串),要么完全采用c++风格(使用std::vector<std::string>)。

您需要使用newstd::string而不是c内存分配函数。
它们不像new那样调用std::string类的构造函数。并且需要调用std::string类的构造函数来进行正确的初始化。

老实说,你根本不应该使用std::string *。如果这样做,您将失去一开始避免使用char *所获得的所有优势。只需使用:

std::vector<std::string>