为什么我不能声明像long long int v [100000000]这样的值?编译时没有错误,但是当我必须输入我的值时,它只会破坏......
我有以下代码:
#include <iostream>
using namespace std;
int main ()
{
int n, i, poz, ok;
long long int a, v[10000000], aux;
cout << "v[0]= "; cin >> v[0];
cout << "n= "; cin >> n;
//cout << v[0] << " ";
for (i=1; i<n; i++)
{
v[i]=((v[i-1]%31337)*(31334%31337))%31337;
//cout << v[i] << " ";
}
//cout << endl;
a=v[n-1];
do
{
ok=0;
for (i=0; i<n-1; i++)
if (v[i]>v[i+1])
{
aux=v[i];
v[i]=v[i+1];
v[i+1]=aux;
ok=1;
}
}while (ok==1);
// for (i=0; i<n; i++)
//{
// cout << v[i] << " ";
//}
//cout << endl;
for (i=0; i<n; i++)
if (v[i]==a)
poz=i+1;
cout << poz;
return 0;
}
我必须输入值:[11863,1661427]。 任何想法我应该怎么做才能输入这些值?
答案 0 :(得分:2)
C ++标准有一个专门用于“实施数量”的附录,解释为
由于计算机是有限的,因此C ++实现不可避免地受限于它们可以成功处理的程序的大小。
您已超出实施对自动存储持续时间变量总大小的限制。 (通常称为“堆栈大小”)。
您可以尝试使用动态分配:
std::vector<long long int> v(10000000);
动态分配也受到约束,但限制通常取决于地址空间最大片段的大小,通常远大于堆栈大小。
Vlad建议的静态存储持续时间也会改变哪个限制适用,但静态存储持续时间的大对象(例如磁盘上的可执行文件为几千兆字节并且需要几分钟才能加载)往往存在严重缺陷。
答案 1 :(得分:0)
此数组在堆栈中分配,其内存通常非常有限。改为使用
static long long v[10000000];
或者最好使用标准容器std::vector<long long>
。此外,从代码中可以看出,数组的实际大小取决于用户输入的数字。因此,使用std::vector<long long>
例如
cout << "n= "; cin >> n;
std::vector<long long> v( n );
或
cout << "n= "; cin >> n;
std::vector<long long> v;
v.reserve( n );