提问者:小点点

这个函数中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;
}

共1个答案

匿名用户

考虑输入[0,1]

最小值是0,所以从每个元素中减去0(不做任何操作)。由于第二个元素是1(而不是0),您设置flag=true

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