使用ifstream转储分段故障核心

时间:2017-07-11 12:47:29

标签: c++ ifstream

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

1 个答案:

答案 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;

    }