我在递增cur值时遇到了一个问题,之后我会得到一个bad_alloc错误。有人能告诉我为什么会发生这种事吗?因为我真的不明白。下面的程序将每个数字保存到向量中,然后打印向量的内容。
#include <iostream>
#include <algorithm>
#include <vector>
#include "printSTL.h"
using namespace std;
int main(){
vector<int> v;
v.reserve(100);
int cur = 1;
while(v.size() != 100){
for(int i = 0; i<cur; i++){
v.push_back(cur);
}
cur++;
}
//this is just my function to print out the value of an stl container
printSTL(v, " ", true);
return 0;
}
while(v.size() != 100){
当矢量的大小正好是100时,这将停止循环。
在循环中,您将首先向向量添加1值。下次两个值。然后三个,依此类推。
如果你在一张纸上算出数学,你会发现你永远不会得到精确的100个向量值。循环的第13次迭代结束时,向量中有91个值。循环的下一次迭代又增加了14个值,使总数达到105个,并且不断增长,徒劳无功地试图在向量中得到精确的100个值。
计算机编程的金科玉律说:“你的计算机会完全按照你让它做的去做,而不是按照你想让它做的去做。”你告诉你的计算机只有在矢量中有100个值的时候才会停止,所以这就是它要做的。由于您给了它一个逻辑上不可能的任务,它只是不断地吞噬内存,直到耗尽并崩溃。