2017-09-09 10 views
1
vector<vector<int> > Solution::prettyPrint(int A) 
    { 
     vector<vector<int>>res(2*A-1, std::vector<int>(2*A-1)); 
     int flag=A; 

     int i, k=0,l=0; 
     int m=2*A-1, n=2*A-1; 
     while(k<=m && l<=n) 
      { 
       for(i=l; i<2*A-1; i++) 
        res[k][i]=flag;//1st row 
       k++; 

       for(i=k; i<2*A-1; i++) 
        res[i][n]=flag;//last column 
       n--; 

       for(i=n; i>l; i--) 
        res[m][i]=flag;//last row 
       m--; 

       for(i=m; i>k; i--) 
        res[i][l]=flag;//1st column 
       l++; 

       flag--; 


      } 
      return res; 
     } 

[2A-1] [2A-1]になる完全な2次元マトリックスのメモリを割り当てたので、セグメンテーションフォールトエラーが発生します。C++で2dベクトルを返す際のセグメンテーションフォールト

A = 3 出力 3 3 3 3 3 \ n 3 2 2 2 3 \ n 3 2 1 2 3 \ N 3 2 2 2 3 \ n 3 3 3 3のようでなければならない場合3 \ nは

+1

有効なインデックスは0から行く '(2 * A-1)-1'。だから、あなたがnにアクセスするとき、それは境界外のアクセスです –

+0

実際の回答が投稿されている間、将来的にはデバッグのテクニックを学んでください。デバッガを使うのと同じです。物事をコメントしています。ここでは、4つのforループと、そのバグがその中にあるという疑いがあります。あなたの仕事がどれであるかを知ることは、あなたの仕事だったでしょう。 – Aziuth

答えて

1

ここでは、あなたのエラーです:

あなたが使用する必要があります
while(k<=m && l<=n) 

while(k<m && l<n) 

ましのでctorインデックスは0から始まらず、1から始まらない。

1

索引付けは0から2*A-1から開始するため、範囲外になる。 int m=2*A-1, n=2*A-1;ので、これを変更する必要があります。これに

while(k<=m && l<=n) 

while(k < m && l < n) 
関連する問題