这个代码出了什么问题?我有分段错误

What is wrong with this code? I am getting segmentation fault

本文关键字:分段 错误 问题 什么 代码      更新时间:2023-10-16

我收到运行时错误,这是什么错误?在移除if(Px[size-1].ele>a)时,错误消失!我只在我为零时尝试使用while,但仍然出现错误!

#include <iostream>
using namespace std;
#define f(i,n) for(i=0;i<n;i++)
#define f1(i,n)    for(i=1;i<=n;i++)
#define ll long long
#define ld long double
#define MOD 1000000007
typedef struct{
    int ele;
    int pos;
    int sum;
} vj;
int main()
{
    int n,size,sum,i,a;
    vj Px[1000000];
    cin>>n;
    size=sum=0;
    f(i,n){
        cin>>a;
        sum+=a;
        while(size){
            if(Px[size-1].ele>a)
                break;
            size--;
        }
        Px[size].ele=a;
        Px[size].pos=i+1;
        Px[size].sum=sum;
        size++;
    }
    //sum=P[0].ele*P[0].pos-P[0].sum;
    //f(i,size-1)
    //    sum+=(P[i+1].ele*(P[i+1].pos-P[i].pos))-(P[i+1].sum-P[i].sum);
    //cout<<size<<endl;
    return 0;
}
typedef struct{
    int ele;
    int pos;
    int sum;
} vj;

int main() {
  vj Px[1000000];
  ...

这是堆栈溢出。MSVC的默认堆栈大小限制为1MB。你正在打破这个极限。

我建议使用堆分配,而不是依赖于那个大小的堆栈本地变量。