当我运行下面的代码时,我收到如下错误:
在抛出'std :: bad_alloc'实例后终止调用 what():std :: 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;
}
答案 0 :(得分:0)
std::string::max_size()
可能是一个很大的数字,例如SIZE_MAX
,例如32位系统上为4 GB或64位系统上的平方。所以你的程序内存不足。
您的程序甚至不需要分配,因为您立即用单字符字符串覆盖前2个字符串!也许你在想reserve
而不是resize
,但即使这样,你也可以保留比max_size
少得多的数量。
NB。不推荐register
,将在C ++ 17中删除。