Ошибка сегментации при возврате двумерного вектора в переполнении стека

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].

если А = 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

1

Решение

Вы выходите за пределы, так как индексирование начинается с 0 до 2*A-1, поскольку int m=2*A-1, n=2*A-1; вам нужно изменить это:

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

к этому:

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

Другие решения

Вот ваша ошибка:

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

Вы должны использовать:

while(k<m && l<n)

Потому что векторные индексы начинаются с 0, а не с 1.

1

По вопросам рекламы [email protected]