这个函数中 std::bad_alloc 的原因是什么?

问题描述

我写在 C++ 函数下面,它循环遍历一个整数向量。每次通过时,它都会从所有数字中减去最小的数字。它应该在每次传递时返回非零元素的数量(这存储在向量结果中并返回)。但是,每当我尝试运行时,我都会收到“std::bad_alloc”。删除“flag=true”行后错误消失。我需要它才能工作,以便 while 循环中断。帮我解决这个问题。

vector<int> cutTheSticks(vector<int> arr) {
    int flag=true,min,count;
    vector<int> result;
    
    while(flag)
    {
        min = arr[0];
        flag = false;
        count = 0;
        for(int i=1; i<arr.size(); i++)
        {
            if(arr[i]<min) 
            {
                min=arr[i];
            }
        }
        for(int i=0; i<arr.size(); i++)
        {
            if(arr[i]!=0)
            {                
                count++;
                flag = true;
            }
            arr[i] = arr[i]-min;
        }
        result.push_back(count);
    }
    return result;
}

解决方法

考虑输入 dict

最小值为 0,因此您从每个元素中减去 0(什么都不做)。由于第二个元素是 1(不是 0),因此您设置了 [0,1]

除了您推回 flag = true 向量之外,此循环中没有任何变化。因此循环将重复直到 result 耗尽内存(或超过其 vector)。