2014-10-09 132 views
-2

我得到運行時錯誤,這是什麼故障? 如果刪除(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

什麼通過調試程序步進程序告訴你? – Angew 2014-10-09 12:35:55

+1

爲什麼你使用那些醜陋的模糊宏? – Deduplicator 2014-10-09 12:36:20

+1

12M +局部變量?難怪事情破裂。 – Deduplicator 2014-10-09 12:37:47

回答

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


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

這是一個堆棧溢出。 MSVC具有1 MB堆棧大小的默認限制。你是搖搖欲墜這個限制。

我建議使用堆分配,而不是依賴該大小的堆棧局部變量。

+0

對於那個局部變量,12x 1MB,這比點擊它多一點。 – Deduplicator 2014-10-09 12:41:12

+0

這是一種「完全打破」 – 2014-10-09 12:41:41

+0

@Deduplicator他是「打」的極限。 – Barmar 2014-10-09 12:41:59