在C ++代码中找不到错误

时间:2013-01-12 21:45:51

标签: c++ pointers

这段代码有什么问题吗?这是读取数据库数据的功能的一部分。 o是数据库输出流的otl_stream对象。我的导师告诉我,我在这段代码中有错误,我是C ++的新手,无法弄清楚是什么问题......我必须使用指针,所以请不要告诉我使用静态字符数组。

char* temp_char;

while (!o.eof()) {

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

   records.push_back(temp_char);

   delete[] temp_char;

}

2 个答案:

答案 0 :(得分: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可以减轻内存管理的负担。

答案 1 :(得分: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;