• 8313阅读
  • 6回复

[提问]vector有bug? [复制链接]

上一主题 下一主题
离线wjz2047
 

只看楼主 倒序阅读 楼主  发表于: 2014-05-09
不多说,直接上代码:
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. int main()
  5. {
  6.     vector<vector<float>> wjz;
  7.     vector<float> w;
  8.     for (int j=0;j<300;++j)
  9.     {
  10.         w.resize(1000000);
  11.         for (int i=0;i<1000000;++i)
  12.         {
  13.             w.push_back(i);
  14.         }
  15.         wjz.push_back(w);
  16.         cout<<"current_size:"<<wjz.size()<<endl;
  17.     }
  18.     return 0;
  19. }

运行会出错,而把其中的resize操作换成clear就没问题,这是不是一个bug?

离线realfan

只看该作者 1楼 发表于: 2014-05-09
vector<float> w;里面放的东西太太多,分配空间失败
两层循环要往里放1000000*300个元素,实际到不了300,就会出错
离线kimtaikee

只看该作者 2楼 发表于: 2014-05-09
你捕获一下异常看看是什么,准是bad_alloc。喂,内存不够了,放这么多东西能不炸掉吗。。。

离线wjz2047

只看该作者 3楼 发表于: 2014-05-09
回 kimtaikee 的帖子
kimtaikee:你捕获一下异常看看是什么,准是bad_alloc。喂,内存不够了,放这么多东西能不炸掉吗。。。 (2014-05-09 17:29) 

那为什么把resize操作换成clear就成功了呢,而且我内存挺大的
离线dbzhang800

只看该作者 4楼 发表于: 2014-05-09
回 wjz2047 的帖子
wjz2047:那为什么把resize操作换成clear就成功了呢,而且我内存挺大的 (2014-05-09 21:11) 

这不能说明什么问题啊,你用resize是的内存是你用clear的内存的二倍。

不过话说回来,你用resize来保留前1000000个位置准备做什么呢?
离线chinagll

只看该作者 5楼 发表于: 2014-05-09
好吧我错了。
离线wjz2047

只看该作者 6楼 发表于: 2014-05-10
回 chinagll 的帖子
chinagll:好吧我错了。
 (2014-05-09 23:23) 

我也错了
快速回复
限100 字节
 
上一个 下一个