2014-11-09 79 views
-1

這是我的代碼,奇怪的是它的節選工作正常。但是,由於這個數組ss,主程序有運行時錯誤。二維數組導致運行時錯誤

#define FOR(i,n) for(i=0;i<n;i++) 
unordered_map<int,int>m; 

........

int ss[1000][1000]={0}; 

     FOR(i,n){ 
      FOR(j,n){ 
       if((i+1 < n) && A[i][j]==A[i+1][j]+1) 
       { 
        if(ss[i][j]==-1)ss[i+1][j]=A[i][j]; 
        else ss[i+1][j]=ss[i][j];m[ss[i+1][j]]++; 
       } 
       if((j+1 < n) && A[i][j]==A[i][j+1]+1) 
       {if(ss[i][j]==-1)ss[i][j+1]=A[i][j]; 
       else ss[i][j+1]=ss[i][j];m[ss[i][j+1]]++; 
       } 

當我嘗試以米來增加它的價值,它會導致運行時錯誤。

+0

你能分享你的錯誤,如果可能的話,你的代碼全部是 – 2014-11-09 07:07:38

+0

它只是說運行時錯誤! – user3250183 2014-11-09 07:08:52

+0

什麼是A?與ss大小相同? – Photon 2014-11-09 07:10:36

回答

0

如果sizeof(int)是4你的平臺上,ss將需要約4 MB的內存。這可能對於您的平臺而言太多堆棧內存。使用堆內存來解決問題。

嘗試

std::vector<std::vector<int>> ss(1000, std::vector<int>(1000, 0)); 

代替。

-1

我想你必須在FOR(i,n)之前定義整數變量「i和j」

試試這個:

int ss[1000][1000]={0}; 
    int i,j; 
    FOR(i,n){ 
     FOR(j,n){ 
      if((i+1 < n) && A[i][j]==A[i+1][j]+1) 
      { 
       if(ss[i][j]==-1)ss[i+1][j]=A[i][j]; 
       else ss[i+1][j]=ss[i][j];m[ss[i+1][j]]++; 
      } 
      if((j+1 < n) && A[i][j]==A[i][j+1]+1) 
      {if(ss[i][j]==-1)ss[i][j+1]=A[i][j]; 
      else ss[i][j+1]=ss[i][j];m[ss[i][j+1]]++; 
      } 
+2

如果'i'和'j'沒有定義,則會出現編譯時錯誤。它沒有解釋運行時錯誤。 – 2014-11-09 07:18:43