在一次锻炼测试中发现致命信号11



在最后一次训练测试中,它说"捕捉到致命信号11"。。。。我的第一个想法是元素的数量太高了,因为它说最大"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;

最新更新