提问者:小点点

在while循环中获取bad_alloc


我在递增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;
}

共1个答案

匿名用户

while(v.size() != 100){

当矢量的大小正好是100时,这将停止循环。

在循环中,您将首先向向量添加1值。下次两个值。然后三个,依此类推。

如果你在一张纸上算出数学,你会发现你永远不会得到精确的100个向量值。循环的第13次迭代结束时,向量中有91个值。循环的下一次迭代又增加了14个值,使总数达到105个,并且不断增长,徒劳无功地试图在向量中得到精确的100个值。

计算机编程的金科玉律说:“你的计算机会完全按照你让它做的去做,而不是按照你想让它做的去做。”你告诉你的计算机只有在矢量中有100个值的时候才会停止,所以这就是它要做的。由于您给了它一个逻辑上不可能的任务,它只是不断地吞噬内存,直到耗尽并崩溃。