• 14994阅读
  • 6回复

[提问]std::bad_alloc怎么解决 [复制链接]

上一主题 下一主题
离线wjz2047
 

只看楼主 正序阅读 楼主  发表于: 2014-05-05
调试的时候发现在执行vector的push_back操作时发生std::bad_alloc错误。查阅资料后,我在对vector执行push_back操作前先执行reserve操作,这样应该就不会在中途进行内存的重新分配之类的操作了。意外的是,错误依旧,这是怎么回事呢?
离线wjz2047

只看该作者 6楼 发表于: 2014-05-06
回 dbzhang800 的帖子
dbzhang800:楼上说的对,就像QString这种东西,其自身大小也就是一个指针大小,1000个QString的vector需要的栈上的内存也就几k 字节。 但是每个QString需要申请的堆内存可就不好说了,几个M,几个G都有可能。 (2014-05-05 16:16) 

我机器内存64G,程序运行时通过任务管理器发现内存使用一般在5G多一点。似乎不是内存不够的原因。有没有这样的情况:机器内存很大,但程序能用的内存并没有那么大,所以才不够的,不知张老师怎么看?
离线wjz2047

只看该作者 5楼 发表于: 2014-05-06
回 realfan 的帖子
realfan:我觉得原因可能是这样的,reserve操作只是对元素基本内容空间进行了保留。而元素的的内容,很大一块是在堆上的,在push_back过程中,需要分配的堆内存如果很大,也可能会导致失败。 (2014-05-05 12:26) 

我机器内存64G,程序运行时通过任务管理器发现内存使用一般在5G多一点。似乎不是内存不够的原因。有没有这样的情况:机器内存很大,但程序能用的内存并没有那么大,所以才不够的,不知您怎么看?
离线dbzhang800

只看该作者 4楼 发表于: 2014-05-05
楼上说的对,就像QString这种东西,其自身大小也就是一个指针大小,1000个QString的vector需要的栈上的内存也就几k 字节。 但是每个QString需要申请的堆内存可就不好说了,几个M,几个G都有可能。
离线realfan

只看该作者 3楼 发表于: 2014-05-05
回 wjz2047 的帖子
wjz2047:push_back一个vector,很大 (2014-05-05 10:41) 

我觉得原因可能是这样的,reserve操作只是对元素基本内容空间进行了保留。而元素的的内容,很大一块是在堆上的,在push_back过程中,需要分配的堆内存如果很大,也可能会导致失败。
离线wjz2047

只看该作者 2楼 发表于: 2014-05-05
回 realfan 的帖子
realfan:push_back什么内容,大吗?内容可以直接赋值吗 (2014-05-05 09:40) 

push_back一个vector,很大
离线realfan

只看该作者 1楼 发表于: 2014-05-05
push_back什么内容,大吗?内容可以直接赋值吗
快速回复
限100 字节
 
上一个 下一个