【发布时间】:2026-02-13 12:00:01
【问题描述】:
我正在尝试在二维矩阵中打印同心矩形图案。
但是,它显示了一个分段错误。我尝试将所有代码作为注释。
我认为声明本身有问题。这是什么?
int l = 2*A - 1;
vector<vector<int> > ar(l);
for(int i = 0; i<(2*A - 1); i++)
{
for (int j = 0; j<(2*A - 1); j++)
{
int h= max(abs(A - i + 1),abs(A - j + 1));
ar[i][j] = h+1;
}
}
return ar;
【问题讨论】:
-
您正在使用向量的向量,但只分配外部的。查看here 以获取正确分配。
-
试试
ar[i][j] = h+1;,而不是ar.at(i).at(j) = h+1;。at成员函数执行边界检查。然后,将其包装在 try 块中并捕获异常。 -
您已声明
ar的大小无法容纳任何ints。这是一个lx0矩阵。 -
vector<int>s 中的vector<vector<int> >被初始化为大小为零。因此,在内循环中所有at[i][j]的使用都具有未定义的行为,因为operator[]()不会调整向量的大小。
标签: c++ multidimensional-array segmentation-fault stdvector