将单个字符从文本文件存储到向量C ++中时,std :: bad_alloc

时间:2018-04-16 04:46:28

标签: c++ memory vector stdvector bad-alloc

所以我的目标是从文件中读取并存储单个字符(它们是基因组序列)。文件非常大,基本上看起来像这样:

>gi|188033402|emb|CU859091.1| A BAC library has been constructed from PN40024...
AGCTCCTTTTTAAAACAACATTCAAGAAATTGGAGTTTGGCATTTTTACAAAGAGCATATTCAGCTCTGG
GAAGTATTTCTTGAGCAAAGAGGAGCGAAAATAGATCCTAAATGTTCCCCAGATTTTCCCCAGATTCCAA

可以完全忽略以“>”字符开头的行。所以基本上我只想要“AGCTCCTTTTTA ......”部分。

我的代码适用于较小的文件,但崩溃时文件较大。我试图找出这里的内存问题以及如何解决它。我运行文件时遇到的错误是:

terminate called after throwing an instance of 'std::bad_alloc'
   what(): std::bad_alloc
Aborted (core dumped)

这是我用于读取单个字符并将它们存储到向量中的简化代码:

int main(int argc, char * argv[])
{
   ifstream file (argv[1]);

   vector<char> sequenceA; // to store the single characters
   string line; // to grab lines from the file
   char c; // to grab the single character from the file

   // go through the file
   while(getline(file,line))
   {
      //store the line
      stringstream stream(line);

      // go through and grab each single character in the line
      while(stream.get(c))
      {
         if(c == '>')
         {
            // break and continue to the next line
            break;
         }
         else
         {
            // add the character to the list
            sequenceA.push_back(c);
         }
      }
   }

我正在查看stackoverflow上的其他“std :: bad_alloc”帖子,但似乎找不到帮我解决问题的帖子,所以你的帮助真的很感激!如果你不能说,我仍然是编程的新手,并希望你的解释。

非常感谢!

1 个答案:

答案 0 :(得分:1)

这意味着程序最终要求一个足够大的连续内存块,系统无法提供它。

如果您坚持使用自己的方法,可以使用deque代替vector进行快速修复。