微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我在 C++ 程序中遇到 bad_alloc 错误

如何解决我在 C++ 程序中遇到 bad_alloc 错误

我编写了一个 C++ 程序,但出现错误。 我不明白我收到错误的原因。 请帮我解决这个问题。

这是我的代码

#include <bits/stdc++.h>
#define endl "\n"
#define int long long
using namespace std;

void solve() {
    int n,x;
    cin >> n >> x;
    cout << n << x;
    vector <int> in(n);
    for (auto &p : in)
        cin >> p;

    vector<int> vect;
    vect = in;

    int cnt = 0;
    int l = n;
    for (int i = 0; i < l; i++) {
        if (vect[i] % 2 == 0) {
            while (x--) {
                vect.push_back(vect[i] / 2);
                L++;
            }
        }
        else {
            cnt = i;
            break;
        }
    }
    int sum = 0;
    for (int i = 0; i < cnt; i++) {
        sum += vect[i];
    }
    cout << sum << endl;
}


signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int t;
    cin >> t;
    while (t--) {
        solve();
    }
}

输入是:

2 1 2 12 4 2 4 6 8 2 

这是我在 sublime text 中编译时遇到的错误

terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
[Finished in 4.0s]

解决方法

问题在于变量x的处理。不要问我解决方案是什么,但我可以描述问题。

        while (x--) {
            vect.push_back(vect[i] / 2);
            l++;
        }

此循环第一次运行 x 等于 2。因此,两个项被添加到向量中,x 取值 -1

该循环下次运行时 x-1 开始,因此循环会一直运行,直到内存不足并出现 bad_alloc 异常。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。