分割故障在C 中返回2D矢量时

Segmentation fault while returning a 2d vector in C++

本文关键字:2D 返回 故障 分割      更新时间:2023-10-16
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;
        }

当我为完整的2D矩阵分配内存时,它为什么会产生分割故障错误,该内存将是[2a-1] [2a-1]。

如果a = 3输出必须像3 3 3 3 3 n3 2 2 2 2 3 n3 2 1 2 3 n3 2 2 2 2 3 n3 3 3 3 3 n

您超出了界限,因为索引从0到2*A-1。由于int m=2*A-1, n=2*A-1;您需要更改此信息:

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

while(k < m && l < n)

这是您的错误:

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

您应该使用:

while(k<m && l<n)

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