Почему я получаю ошибку сегментации - PullRequest
0 голосов
/ 02 июня 2018

Я пытаюсь напечатать концентрический прямоугольный узор в 2D матрице.

Однако, это показывает мне ошибку сегментации.Я попытался сделать весь код в качестве комментария.

Я полагал, что в самой декларации есть ошибка.Что это?

   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;

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

Я понял, что в самой декларации есть ошибка.Что это?

Вы правы.У вас есть двумерный вектор, и вы позаботились об одном слое, объявив:

vector<vector<int> > ar(l);

Простое исправление будет:

std::vector< std::vector<int> > ar(l, std::vector<int>(l));

Теперь это обеспечит инициализацию двухмерноговекторный массив, заполненный 0 S, размером 2*A - 1.

См. сейчас: https://www.ideone.com/1wYCba


Краткое примечание : Однако, если выдействительно работают над концентрическим прямоугольным шаблоном , ваш код / ​​логика неверны.Выше код не печатает то, что вы хотите, даже если теперь он соответствует.

0 голосов
/ 02 июня 2018

Перед началом внутреннего цикла добавьте:

ar[i].resize(2*A - 1);

(Если фиксировано A, вы можете найти std::array более удобным, чем векторы.)

...