0

このコードに何か問題がありますか? これは、データベースのデータを読み取る関数の一部です。oデータベース出力ストリームのotl_streamオブジェクトです。私のメンターは、私はこのコードに間違いがあると言いました。私は C++ の初心者で、何が問題なのかわかりません...ポインタを使用する必要があるため、静的 char 配列を使用するように言わないでください。

char* temp_char;

while (!o.eof()) {

   temp_char = new char [31];
   o>>temp_char;

   records.push_back(temp_char);

   delete[] temp_char;

}
4

2 に答える 2

2

o.eof()ストリームの最後を超えて読み取ろうとした後にのみ true になるwhile(!o.eof())ため、ループ コントロールには使用しないでください。

recods.push_back(temp_char)ポイント先の配列をコピーしない限り、records後にダングリングポインターが含まれますdelete[] temp_char;

while(true) {
    temp_char = new char[31];
    o >> temp_char;
    if (!o) {
        delete[] temp_char;
        break;
    }
    records.push_back(temp_char);
}

見栄えが良くなります(慣用的ではないと確信していますが)。

もちろん、を使用std::stringすると、メモリ管理が軽減されます。

于 2013-01-12T21:52:26.470 に答える
0

単語を読むたびに文字列を再割り当てしません。また、最後の反復でスペースが読み取られると、空の文字列がプッシュバックされます。

    char* temp_char = new char[BUF_SZ];

    while ( ! o.eof() ) {

       o>>temp_char;
if( *temp_char != '\0' ) // If not an empty string
       records.push_back(temp_char);

    }

    delete[] temp_char;
于 2013-01-12T22:34:45.853 に答える