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里开空间,这很大,不用担心。

身边有大神的感觉就像现在窗外的天,让人心情明媚极了!
--------------------- 
作者:tvxq_xy 
来源:CSDN 
原文:https://blog.csdn.net/TVXQ_xy/article/details/50392384 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值