在C ++中返回2d向量时的分段错误

时间:2017-09-09 12:05:59

标签: c++ vector segmentation-fault spiral 2d-vector

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]的完整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

2 个答案:

答案 0 :(得分:1)

这是您的错误:

[Delegate]

您应该使用:

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

因为矢量索引从0开始而不是从1开始。

答案 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)