仅在一项运动测试中收到致命信号11

问题描述 投票:-1回答:1

在练习的最后一次测试中,它说“捕获到致命信号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;

}
c++ c++11 fatal-error
1个回答
0
投票

原因很简单。您超出了最大堆栈大小。通过乘以双精度数组大小,您也在以字节为单位增加了所需的大小。从100001 * 8 =>〜0.76MB到〜7.63MB,超过了大多数系统默认堆栈大小。有关堆栈大小的更多详细信息,请参见:https://stackoverflow.com/a/1826072/10503293

一个简单的解决方案是像在堆上那样分配数组:

double* v = new double[1000001];
... code ...
delete[] v;
© www.soinside.com 2019 - 2024. All rights reserved.