我编写了一个代码来读取文本文件并对其执行一些处理。它在我自己的PC和另一个Linux系统上正常工作。但是,当我在不同的Linux系统上运行它时,我会得到“ifstream”命令的“分段错误(核心转储)”错误。我检查了文本文件,如果它太小,例如两行,cose工作正常,但当文件较大时,例如20行,它与分段错误错误一起崩溃。
导致错误的代码:
int ExtractFragments(int fragmentLength, int overlappingResidues)
{
string line = "", lines = "", interfaceFileName = "";
ifstream interfaceList("tempInterfaceList.txt");
if (interfaceList)
{
bool errFlag = false;
while (getline(interfaceList, interfaceFileName))
{
cout << endl << "interfaces/" << interfaceFileName;
ifstream interfaceFile("interface.txt"); //This line crashes
if (interfaceFile)
cout << "\nHello";
}
}
return 0;
}
任何想法为什么这个ifsream导致分段错误以及如何解决它? 谢谢!
答案 0 :(得分:-1)
我怀疑对同一个流的并发访问可能会引入数据争用。你在while循环中以输入模式打开文件,你必须处理异常
int ExtractFragments(int fragmentLength, int overlappingResidues)
{
ifstream interfaceList("tempInterfaceList.txt");
interfaceList.exceptions ( std::ifstream::failbit | std::ifstream::badbit );
try
{
if ( interfaceFile.fail() )
{
return -1;
}
bool errFlag = false;
while (getline(interfaceList, interfaceFileName))
{
cout << endl << "interfaces/" << interfaceFileName;
ifstream interfaceFile("interface.txt"); //This line crashes
if (interfaceFile)
cout << "\nHello";
}
}
catch(std::ifstream::failure &FileExcep)
{
cout<<FileExcep.what()<<endl;
return -1;
}
catch(...)
{
cout<< "other exception thrown"<<endl
return -1;
}
return 0;
}