当前位置: 首页 > 知识库问答 >
问题:

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

谭吉星
2023-03-14

下面我写了一个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个答案

卫嘉谊
2023-03-14

考虑输入[0,1]

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

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

 类似资料:
  • 正如我在标题中所述,我只是不明白为什么这个函数会抛出<code>std::bad_alloc</code>。如果我们看一看cppreference,所有三种可能的实现都是如有人所假设的,并且看起来没有特别需要动态内存分配。

  • 我是一个菜鸟,我在跟着 swift 官方文档进行学习。 ↓这是官方的示例图片,以证明我没有写错 示例代码如下,以便于大家复制 但是我在 Xcode 中却无法编译成功(最后 struct... 不是我自己改的,文件创建出来就是这样的,好像是写法改了)

  • 问题内容: DataflowAnomalyAnalysis:找到变量“ variable”(行“ n1”-“ n2”)的“ DD”异常。 DataflowAnomalyAnalysis:找到变量“ variable”(行“ n1”-“ n2”)的“ DU”异常。 DD和DU听起来很熟悉…我想在涉及最差的前后条件的测试和分析中说些什么,但我不记得具体情况。 NullAssignment:将Objec

  • 我对编程很陌生,我已经自学了将近一个月了,有谁能给我解释一下我代码中错误的原因吗?在“Total(moneyConv(moneySum*moneyRate))”中出错。行,表示实际和形式的论点在长度上是不同的。我检查了我所有的参数,我觉得很好。多谢!

  • 我有一个Visual Studio 2008 C++03应用程序,使用在Windows XP SP3中运行的Boost 1.47.0。 调用引发异常。 在“输出”窗口中,我看到一条调试堆消息:“heap[test.exe]:无效的分配大小-CDCDCDCE(超出7FFDEFFF)” callstack显示boost.filesystem正在创建一个新的区域设置和Microsoft标准库文件xloc

  • 问题内容: 当我尝试运行程序时,出现以下错误 请帮忙 问题答案: 从Javadoc: 如果Java虚拟机找不到声明为native的方法的适当本机语言定义,则抛出该异常。 这是与JNI相关的错误。loadJacobLibrary试图加载名为jacob-1.14.3-x86的本机库,但在java.library.path定义的路径上找不到该库。启动JVM时,应将此路径定义为系统属性。例如 在Windo