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

C++ 为什么在运行此代码时收到std::bad_alloc异常?,c++,bad-alloc,C++,Bad Alloc,当我运行下面的代码时,我收到如下错误: 在抛出“std::bad_alloc”的实例后终止调用 什么():std::坏的 此应用程序已请求运行时在 不寻常的方式。请联系应用程序的支持团队以了解更多信息 信息 我认为这可能是由“resize()”行引起的,但我不知道如何修复它。这是我的密码: #include <cstdio> #include <string> #include <iostream> using namespace std; long lon

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

在抛出“std::bad_alloc”的实例后终止调用
什么():std::坏的

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

我认为这可能是由“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;
长n,长l,长r;
字符串x[3];
int main()
{
ios::与stdio同步(false);
对于(inti=0;i>n>>l>>r;

for(register long long i=2;i
std::string::max_size()
很可能是一个大数字,如
size_max
,例如32位系统上的4 GB或64位系统上的4 GB。因此,您的程序内存不足

您的程序甚至不需要该分配,因为您立即用一个字符串覆盖前两个字符串!可能您考虑的是
reserve
而不是
resize
,但即使如此,您也可以保留比
max\u size
小得多的量


注意。
register
已被弃用,将在C++17中删除。

不要将字符串大小调整到如此大。是否尝试打印出要调整大小的大小?实际上根本不需要调整它们的大小。
C=a+b
将自动在
C
中分配足够的存储空间。请参阅示例provided(您的实现可能不同)这很能说明你可能不必要地分配了多少内存。在你的情况下,你真的需要在三个字符串之间留出6gB的空间来做任何你想做的事情吗?@godwing:如果你的程序是windows 32位,那么你只需要用200.001%的计算机内存来分配这两个字符串。我认为你不理解。你在尝试ng使用20亿字节长的字符串。其中三个。