处理大向量会使bad_alloc导致程序崩溃

埃德温

我有一个vector<string>需要处理的大型邮件(大小约为100万):

stringstream numStr;
cout << "before loop" << endl;
for(unsigned int i = 0; i < numList.size(); i++) {
    cout << i << ": " << ((NORM_MAX - NORM_MIN) * (atoi(numList[i].c_str()) - min)) / (max - min) + NORM_MIN << endl;
    int number = ((NORM_MAX - NORM_MIN) * (atoi(numList[i].c_str()) - min)) / (max - min) + NORM_MIN;
    numStr << number;
    numList[i] = numStr.str();
}

但是,程序在达到36691〜36693时崩溃

(snip)  
36689: 288  
36690: 264  
36691: 245  

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc

我该怎么做才能找出造成此问题的原因?

雷米·勒博(Remy Lebeau)

正如您的代码现在一样,您将stringstream 在循环外部,这意味着您将一遍又一遍地不断向现有流的末尾添加新数字,然后在每次循环迭代中存储整个列表

numList[i]   = "... 288"
numList[i+1] = "... 288 264"
numList[i+2] = "... 288 264 245"

等等...

因此,是的,如果分配的非常大,则最终将耗尽其内存,尝试分配其中的 号具有格式化string整个数字列表numList.size()

你可能打算把stringstream 内环路代替,使每一个迭代格式和存储 int中的每个值numList槽:

cout << "before loop" << endl;
for(unsigned int i = 0; i < numList.size(); i++) {
    int number = ((NORM_MAX - NORM_MIN) * (atoi(numList[i].c_str()) - min)) / (max - min) + NORM_MIN;
    cout << i << ": " << number << endl;
    stringstream numStr;
    numStr << number;
    numList[i] = numStr.str();
}

numList[i]   = "288"
numList[i+1] = "264"
numList[i+2] = "245"

等等...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

处理大向量会使bad_alloc导致程序崩溃

来自分类Dev

向量抛出bad_alloc

来自分类Dev

程序中的 C++ 向量 std::bad_alloc 错误

来自分类Dev

C ++向量std :: bad_alloc错误

来自分类Dev

std :: bad_alloc导致线程成员函数和mex文件崩溃

来自分类Dev

已经创建的向量中的奇怪std :: bad_alloc

来自分类Dev

级联两个向量时的std :: bad_alloc

来自分类Dev

'new'导致std :: bad_alloc在相对不大的分配上

来自分类Dev

内存位置未处理的异常bad_alloc

来自分类Dev

如何在RAII中处理bad_alloc?

来自分类Dev

CPP - 未处理的异常 std::bad_alloc

来自分类Dev

我在C ++程序中遇到bad_alloc错误

来自分类Dev

程序在新抛出Bad_alloc之前被中止

来自分类Dev

奇怪的std :: bad_alloc

来自分类Dev

在循环中简单使用动态内存会导致bad_alloc

来自分类Dev

C ++奇怪的std :: bad_alloc异常

来自分类Dev

C ++ std :: bad_alloc错误

来自分类Dev

C ++ std :: bad_alloc错误

来自分类Dev

在while循环中获取bad_alloc

来自分类Dev

我的bad_alloc来自哪里?

来自分类Dev

如何修复“std::bad_alloc”

来自分类Dev

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

来自分类Dev

我期望的时候不会抛出Bad_alloc

来自分类Dev

bad_alloc标识符无法识别?

来自分类Dev

如果我得到std :: bad_alloc怎么办?

来自分类Dev

大数据集的dijkstra计算期间的std :: bad_alloc

来自分类Dev

从bad_alloc获得更多详细信息?

来自分类Dev

C ++ 11-constexpr上的bad_alloc

来自分类Dev

如果我得到std :: bad_alloc怎么办?