std::bad_alloc的处理

当然,我这里只是针对我这一会儿的情况。最近跑的一个C++程序,迭代时间长,而且一共有800个迭代,等了一天,跑到第284个迭代就挂了,重新跑一次,同样的地方又挂了。各种检查是不是有申请了内存没释放(delete[])没释放的。最后,千辛万苦,终于发现,是vector这个小家伙捣的鬼。

http://www.educity.cn/wenda/257316.html中说:
”事实超乎你的想象,我一个朋友用vector直接把内存吃光了,你好好检查下
如果有很多个的话,不妨手动清空掉,或者你不用vector试试,估计就不会出问题了
主要你知道吗,vector不止是出现内部内存碎片,它还导致外部内存碎片

vector开辟的是一个连续的空间,比方你这个空间是100M,分配不出来这么大的连续空间就报错了。
即使内存里还有1G但是没有连续100M的空间也会bad_alloc的“

下面摘自http://www.cnblogs.com/BeyondAnyTime/archive/2012/08/08/2627666.html,很好的一个vector总结
说v.~ vector () ,销毁所有数据,释放内存。
而后又看到另一个帖子:
http://www.cnblogs.com/lxshanye/archive/2013/05/20/3088558.html
说C++中的vector不能像C#一样有托管的垃圾回收机制回收被占用的内存空间,但是你可以在使用完vector后调用~vector()析构函数释放内存。

赶紧试一下这种方法,果然一举成功!
再次感谢网上的大神们!

后来又不行了,跑到第1200多个迭代的时候,又崩了。这回请教了下坐在我身后的阿龙大神,他说,我一次读入vector的数据只有20万行的话,其实只有一两兆,很小。建议我自己先开个数组,然后不要clear,下一回就直接覆盖上去就好了。我谢过后,正准备改,阿龙一个激灵,站起身来跟我说,其实也不用自己开,只要将”new vector“那句放出去就好了,意思是因为我是在函数内new vector,这就只能在stack中开空间,stack只有一两兆。应该放到函数外,即file scope上,这样就是在heap里开空间,这很大,不用担心。

身边有大神的感觉就像现在窗外的天,让人心情明媚极了!

  • 17
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
libcurl std::bad_alloc 是一个cURL库可能会抛出的异常类型。它表示在使用libcurl进行网络通信时,可能由于内存不足而无法分配所需的内存引发该异常。 std::bad_alloc 是C++标准库异常类之一,它表示在动态内存分配过程无法满足分配请求时,会抛出该异常。libcurl使用动态内存分配来管理网络通信过程的资源,包括连接句柄、缓冲区等。当libcurl尝试分配内存时,如果可用内存不足,可能会导致std::bad_alloc 异常的抛出。 当程序抛出libcurl std::bad_alloc 异常时,我们可以考虑以下几个方面的解决方法: 1. 检查系统资源:首先,确保系统具有足够的可用内存资源。可以检查服务器或运行该程序的计算机的内存使用情况,以确保没有其他进程或应用程序占用过多的内存资源。 2. 优化代码:检查代码是否存在内存泄漏或者资源未正确释放的问题,尽量减少内存的使用量。可以通过使用智能指针、管理资源的RAII技术等方式来确保资源及时释放。 3. 调整内存分配策略:如果确认系统资源充足且代码没有问题,可以尝试调整libcurl的内存分配策略。有时,可以通过设置libcurl的选项来减少内存的使用量或更合理地分配内存。可以参考libcurl的文档或者搜索相关资料了解如何进行调整。 4. 更新libcurl版本:如果libcurl版本较旧,可能存在一些已知的内存管理问题或者相关的bug。可以尝试使用更新的libcurl版本,以修复潜在的内存分配问题。 总之,libcurl std::bad_alloc 异常表示在使用libcurl进行网络通信时出现了内存不足的情况。通过检查系统资源、优化代码、调整内存分配策略或更新libcurl版本等方式,可以尝试解决该异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值