исключая неверную инструкцию — Исключение: EXC_BAD_INSTRUCTION (код = EXC_I386_INVOP, субкод = 0x0) с использованием переполнения стека

Проблема, как показано на рисунке

vector<int> printMatrix(vector<vector<int> > matrix) {
if (matrix.empty()) {
return vector<int>();
}
this->matrix = std::move(matrix);
int startRow = 0, lastRow = this->matrix.size() - 1;
int startCol = 0, lastCol = this->matrix[0].size() - 1;
while (startRow <= lastRow && startCol <= lastCol) {
printCircle(startCol, lastCol, startRow, lastRow);
++startCol, --lastCol, ++startRow, --lastRow;
}
}

Работало нормально, пока переменная startRow меньше чем lastRow. В общем случае, однако, когда startRow больше, чем lastRow, что должно быть выходом из цикла while, но вызывает исключение: EXC_BAD_INSTRUCTION (code = EXC_I386_INVOP, subcode = 0x0). Я запутался в исключении повышения, как показала картина.

-1

Решение

vector<int> printMatrix(vector<vector<int> > matrix) {
if (matrix.empty()) {
return vector<int>();
}
this->matrix = std::move(matrix);
int startRow = 0, lastRow = this->matrix.size() - 1;
int startCol = 0, lastCol = this->matrix[0].size() - 1;
while (startRow <= lastRow && startCol <= lastCol) {
printCircle(startCol, lastCol, startRow, lastRow);
++startCol, --lastCol, ++startRow, --lastRow;
}
// **** return a vector here ****
}

Нужно вернуть вектор из функции или изменить его на void.

0

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector