这段代码有什么问题吗?这是读取数据库数据的功能的一部分。 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;
}
答案 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;