C++ 在C+中返回2d向量时出现分段错误+; 向量解决方案::预打印(int A) { 向量(2*A-1,std::vector(2*A-1)); int flag=A; int i,k=0,l=0; int m=2*A-1,n=2*A-1; 而(k
以下是您的错误:C++ 在C+中返回2d向量时出现分段错误+; 向量解决方案::预打印(int A) { 向量(2*A-1,std::vector(2*A-1)); int flag=A; int i,k=0,l=0; int m=2*A-1,n=2*A-1; 而(k,c++,vector,segmentation-fault,spiral,2d-vector,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
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;
}
while(k你越界了,因为索引从0开始到2*A-1
。因为int m=2*A-1,n=2*A-1;
你需要改变这个:
while(k<m && l<n)
while(kValid索引从0变为(2*A-1)-1
。因此,当您访问n-实际答案已发布时,这是越界访问。今后,请确保您学习一些调试技术。例如使用调试器。以及注释内容。这里,我们有四个for循环,并怀疑其中一个循环中存在错误。您的工作是找出它是哪一个.
while(k<m && l<n)
while(k<=m && l<=n)
while(k < m && l < n)