【发布时间】:2018-02-18 04:58:57
【问题描述】:
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 \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
【问题讨论】:
-
有效索引从 0 到
(2*A-1)-1。因此,当您访问 n 时 - 它超出了访问范围 -
虽然发布了实际答案,但为了将来,请确保您学习了一些调试技术。就像使用调试器一样。并评论事情。在这里,我们有四个 for 循环,并且有人怀疑 bug 存在于其中一个中。找出它是哪一个本来是你的工作。
标签: c++ vector segmentation-fault spiral 2d-vector