运行此代码时,为什么会收到std :: bad_alloc异常?
问题描述:
当我运行下面的代码,我收到这样的错误:运行此代码时,为什么会收到std :: bad_alloc异常?
终止叫做抛出 '的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位系统上的平方。所以你的程序耗尽内存。
由于您立即用单字符字符串覆盖前两个字符串,您的程序甚至不需要该分配!也许你在考虑reserve
而不是resize
,但即使如此,你仍可以保留比max_size
少得多的金额。
注意: register
已弃用,并将在C++ 17中删除。
不要调整字符串的大小。您是否尝试打印出您尝试调整大小的尺寸? –
你根本不需要调整它们的大小。 'c = a + b'会自动在'c'中分配足够的存储空间。 – aschepler
是的,它是2147483647 – godwings