C++ C++;:相同的代码,不同的结果
今天我的同学让我帮她调试代码如下:C++ C++;:相同的代码,不同的结果,c++,C++,今天我的同学让我帮她调试代码如下: int main(int argc, char *argv[]) { vector<Woker> A; int a; a = read_txt("234",A); if( a==-1 ) { cerr<<"wrong"<<endl; } // else // { // print(A); // } return 0; } int rea
int main(int argc, char *argv[])
{
vector<Woker> A;
int a;
a = read_txt("234",A);
if( a==-1 )
{
cerr<<"wrong"<<endl;
}
// else
// {
// print(A);
// }
return 0;
}
int read_txt(string filename,vector<Woker> & A)
{
ifstream in(filename);
if( !in )
{
return -1;
}
while( !in.eof())
{
Woker temp;
in >>temp.ID>>temp.Name>>temp.Salary>>temp.WorkYears;
A.push_back(temp);
}
in.close();
return 0;
}
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
但是,我将此代码复制到另一个文件中并运行它。我得到以下结果:
int main(int argc, char *argv[])
{
vector<Woker> A;
int a;
a = read_txt("234",A);
if( a==-1 )
{
cerr<<"wrong"<<endl;
}
// else
// {
// print(A);
// }
return 0;
}
int read_txt(string filename,vector<Woker> & A)
{
ifstream in(filename);
if( !in )
{
return -1;
}
while( !in.eof())
{
Woker temp;
in >>temp.ID>>temp.Name>>temp.Salary>>temp.WorkYears;
A.push_back(temp);
}
in.close();
return 0;
}
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
有没有人能告诉我是什么原因造成了这种不同?第一个结果意味着,在您的计算机上,没有名为
“234”的文件。
;因此,函数会立即返回,而不会进入buggy循环
第二个结果可能是因为循环测试“文件结束”条件(但错误:您应该在尝试读取后进行测试,因为只有在尝试读取超过结束时才设置该条件),但不测试任何其他错误。如果任何输入错误,导致使用>
读取失败,循环将在每次读取失败后继续插入temp
的副本。最终您将耗尽内存,这通过抛出bad\u alloc
异常来指示
更正确的循环版本是:
Woker temp;
while (in >>temp.ID>>temp.Name>>temp.Salary>>temp.WorkYears) {
A.push_back(temp);
}
它将在文件末尾或任何输入失败时结束。如果要报告错误,可以在.eof()中检查,
并在.fail()中检查