这段代码有什么问题?我得到分段错误

时间:2014-10-09 12:34:43

标签: c++

我收到运行时错误,这有什么问题? 在删除if(Px [size-1] .ele> a)错误消失时! 我尝试使用的时候只有当我为零时仍然出现错误!

#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;
}

1 个答案:

答案 0 :(得分:2)

typedef struct{
    int ele;
    int pos;
    int sum;
} vj;


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

这是堆栈溢出。 MSVC的默认限制为1 MB堆栈大小。你摇摇欲坠这个限制。

我建议使用堆分配而不是依赖于该大小的堆栈局部变量。