在练习的最后一次测试中,它说“捕获到致命信号11”。...我首先想到的是元素数量过高,bc说最大“ n”是9位数字,但是如果我再加上一个数字向量为0(例如“ 1000001”而不是“ 100001”),它在每次测试中都会给我“致命致命信号11”(因为向量元素数太高)。...所以我不知道该怎么办
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("pozmax.in");
ofstream g("pozmax.out");
double v[100001];
int i, n, dif, difmax, k,maxi;
int main()
{
f>> n;
maxi=-99999999;
for (i = 1; i <= n; i++)
f>> v[i];
for (i = 1; i < n; i++)
if(v[i]>maxi)
maxi=v[i];
for (i = 1; i <= n; i++)
if(v[i]==maxi)
{k=i;
break;}
g<<k<<" ";
for (i = 1; i <= n; i++)
if(v[i]==maxi)
k=i;
g<< k;
f.close();
g.close();
return 0;
}
原因很简单。您超出了最大堆栈大小。通过乘以双精度数组大小,您也在以字节为单位增加了所需的大小。从100001 * 8 =>〜0.76MB到〜7.63MB,超过了大多数系统默认堆栈大小。有关堆栈大小的更多详细信息,请参见:https://stackoverflow.com/a/1826072/10503293
一个简单的解决方案是像在堆上那样分配数组:
double* v = new double[1000001];
... code ...
delete[] v;