vector输出badalloc

img

大佬帮忙看一下哪里错了😭

我仿写了一下是能跑的


#include <bits/stdc++.h>
using namespace std;

int main()
{
    vector<int> a;
    int k = 9;
    while (k > 1)
    {
        if (!(k % 2))
        {
            k /= 2;
            a.push_back(k);
        }
        else
        {
            k = (k * 3) + 1;
            a.push_back(k);
        }
    }
    for (int i = 0; i < a.size(); i++)
    {
        cout << a[i] << ' ';
    }
}

img

哦我大概明白了,因为你两个都是if,不存在互斥关系
所以如果k在while开始时为2的话,会折半变为1,并push一个1进去,然后进入下一个if判断,此时k为1,同样会进入下一个if,并在下一个if中变回4
所以你的程序一直在421中横跳,但是因为第二个if的存在,k在while末尾值永远不会为1,所以形成死循环,最终空间不足.
你把两个if改为互斥版本(见我上方给出的代码)即可
有帮助望采纳