1

「 」で満たされた文字列を分離して、配列に格納しようとしています。そのために私はコードを書きました、

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;」という行でクラッシュします。最初に十分なスペースを割り当ててから再割り当てを行わないと、クラッシュしません。

4

2 に答える 2

1

c メモリ割り当て関数以外で使用newする必要があります。とは異なり、クラス のコンストラクターを呼び出しません。また、適切な初期化のためにクラスのコンストラクターを呼び出す必要があります。std::string
std::stringnewstd::string

正直なところstd::string *、まったく使用すべきではありません。そうすることで、最初から使用char *を避けることで得られたすべての利点を失います。単純に使用します:

std::vector<std::string>
于 2012-12-25T11:01:32.877 に答える
1

C++ スタイルのオブジェクトで C スタイルのメモリ管理を使用しないでください。完全に C スタイルにする (ヌル終了char*文字列を使用する) か、完全に C++ スタイルにする ( を使用するstd::vector<std::string>) かのいずれかです。

于 2012-12-25T11:03:21.907 に答える