返回信息流最近遇到的一个问题,求大神解答
在vector<string>做push_back的时候,容器里的元素太多程序就崩溃了。
最初的想法是看看能不能用try catch抛出异常的形式捕获一下,但是push_back是没有返回值的。
我的理想情况是如果push_back 超内存的话能返回一些信息,或者打一些日志之类的。
这种情况是不是只能限制vector的元素个数?还有其他更好的方案么?
这是一条镜像帖。来源:北邮人论坛 / cpp / #87681同步于 2015/6/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[问题]vector的push_back()如果超内存
c261002657
2015/6/22镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
try catch, push_back没有返回值,两者有什么关系?
【 在 c261002657 的大作中提到: 】
: 最初的想法是看看能不能用try catch抛出异常的形式捕获一下,但是push_back是没有返回值的。
我没有找到机会throw,因为push_back直接就崩溃了,咋办
【 在 xiaobing307 的大作中提到: 】
: try catch, push_back没有返回值,两者有什么关系?
:
不是push_back会throw?
【 在 c261002657 的大作中提到: 】
: 我没有找到机会throw,因为push_back直接就崩溃了,咋办
内存用完了估计真的没有好的补救方法。最好的办法也就是安乐地死掉了。
应该想想:出现“内存不足”的错误,打印日志,真的是正确的解决方法吗?问题真的解决了吗?
下面是我的同学写的一个程序
struct blahblah *b = (struct blahblah*)malloc(sizeof(struct blahblah));
if (b != NULL) {
doSomething(b);
free(b);
}
printf("Finished!\n");
天哪,这哪里是“处理”了内存分配失败,这段程序的意思是“数据处理不是必须的。如果内存不够,那么数据处理部分可以省略,然后打印Finished!”
因为我现在是用在分布式计算的,现在我有一个唯一ID A 和一个用户ID B
我需要做的是如果A一样,就把B放进vector
但是push_back内存不够了,我就想能不能不够的话我拿到这个A来进行单独处理这样子
确实按照上面同学说的push_back有异常抛出的话我能够抛出这个ID A 其实这样我的初步目的也就达到了
暖神还有更好的解决方案吗
【 在 nuanyangyang 的大作中提到: 】
: 内存用完了估计真的没有好的补救方法。最好的办法也就是安乐地死掉了。
: 应该想想:出现“内存不足”的错误,打印日志,真的是正确的解决方法吗?问题真的解决了吗?
: 下面是我的同学写的一个程序
: ...................
啊,我不确定,我一会好好看看push_back,有的话那我想的事情应该就能做了,谢谢!
【 在 xiaobing307 的大作中提到: 】
: 不是push_back会throw?
【 在 c261002657 的大作中提到: 】
: 因为我现在是用在分布式计算的,现在我有一个唯一ID A 和一个用户ID B
: 我需要做的是如果A一样,就把B放进vector
: 但是push_back内存不够了,我就想能不能不够的话我拿到这个A来进行单独处理这样子
: ...................
要不要自己写一个内存分配器?C++允许你这样做。
1. 楼主要先分清楚throw异常和函数返回值的区别。
2. 有一种异常叫做std::bad_alloc 参看 http://www.cplusplus.com/reference/new/bad_alloc/
3. 试着运行一下这个代码,然后看看结果就明白了: https://github.com/yanyiwu/practice/blob/master/cpp/vector/bad_alloc.cpp
恩恩谢谢,我最先有个误区就是异常是我自己去抛出的,结果push_back内就有异常抛出了
如果我要在bad_alloc中多抛出一些东西(比如抛出内存爆了之前的vector里的内容)的话,是不是要写一个类继承bad_alloc?
【 在 bswgd 的大作中提到: 】
: 1. 楼主要先分清楚throw异常和函数返回值的区别。
: 2. 有一种异常叫做std::bad_alloc 参看 http://www.cplusplus.com/reference/new/bad_alloc/
: 3. 试着运行一下这个代码,然后看看结果就明白了: https://github.com/yanyiwu/practice/blob/master/cpp/vector/bad_alloc.cpp