std::bad_alloc 将文本文件中的单个字符存储到矢量 C++ 时
std::bad_alloc when storing single characters from a text file into a vector C++
所以我的目标是读入并存储文件中的单个字符(它们是基因组序列)。文件很大,基本上是这样的:
>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);
}
}
}
我正在查看 Whosebug 上的其他 "std::bad_alloc" 帖子,但似乎找不到可以帮助我解决问题的帖子,因此非常感谢您的帮助!如果你不知道,我对编程还是很陌生,非常感谢你的解释。
非常感谢!
这意味着程序最终会请求一个足够大的连续内存块,以至于系统无法提供它。
如果您坚持自己的方法,快速解决方法可能是使用 deque
而不是 vector
。
所以我的目标是读入并存储文件中的单个字符(它们是基因组序列)。文件很大,基本上是这样的:
>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);
}
}
}
我正在查看 Whosebug 上的其他 "std::bad_alloc" 帖子,但似乎找不到可以帮助我解决问题的帖子,因此非常感谢您的帮助!如果你不知道,我对编程还是很陌生,非常感谢你的解释。
非常感谢!
这意味着程序最终会请求一个足够大的连续内存块,以至于系统无法提供它。
如果您坚持自己的方法,快速解决方法可能是使用 deque
而不是 vector
。