gpt4 book ai didi

c++ - 使用 ifstream 转储段错误核心

转载 作者:太空宇宙 更新时间:2023-11-04 14:29:40 24 4
gpt4 key购买 nike

我写了一段代码来读取一个文本文件并对其进行一些处理。它在我自己的 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 导致段错误以及如何解决它有什么想法吗?谢谢!

最佳答案

我怀疑对同一流的并发访问可能会引入数据竞争。您正在 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;

}

关于c++ - 使用 ifstream 转储段错误核心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45035085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com