为什么我在运行此代码时收到 std::bad_alloc 异常

Why do I receive a std::bad_alloc exception when running this code?

本文关键字:std bad 异常 alloc 运行 代码 为什么      更新时间:2023-10-16

当我运行下面的代码时,我收到这样的错误:

在抛出"std::bad_alloc">
实例后终止调用 什么((: 标准::bad_alloc

此应用程序已请求运行时在 不寻常的方式。请联系应用程序的支持团队了解更多信息 信息。

我认为这可能是由"resize(("行引起的,但我不知道如何解决它。这是我的代码:

#include <cstdio>
#include <string>
#include <iostream>
using namespace std;
long long n, l, r;
string x[3];
int main()
{
    ios::sync_with_stdio(false);
    for (int i = 0; i <= 2; i++)
        x[i].resize(x[i].max_size());
    x[0] = '0';
    x[1] = '1';
    cin >> n >> l >> r;
    for (register long long i = 2; i <= n ; i++)
        x[i % 3] = x[(i - 2) % 3] + x[(i - 1) % 3];
    cout << x[n % 3].substr(l, r - l + 1) << endl;
    return 0;
}

std::string::max_size()很可能是一个很大的数字,例如SIZE_MAX,例如32位系统上的4 GB或64位系统上的平方。因此,您的程序内存不足。

您的程序甚至不需要该分配,因为您会立即用单字符字符串覆盖前 2 个字符串! 也许您正在考虑reserve而不是resize,但即便如此,您也可以保留比max_size少得多的金额。

铌。 register已弃用,将在 C++17 中删除。