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

时间:2012-12-25 10:59:51

标签: c++ string memory-management

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

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;”,如果我先分配足够的空间,然后再重新分配,我就不会崩溃。

2 个答案:

答案 0 :(得分:1)

您需要new使用std::string而不是内存分配功能 与std::string不同,它们不会为new类调用构造函数。并且需要调用std::string类的构造函数进行正确的初始化。

说实话,你根本不应该使用std::string *。这样做会失去在避免使用char *时获得的所有优势。只需使用:

std::vector<std::string>

答案 1 :(得分:1)

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