Переполнение стека в C ++?

0

Я написал рекурсивную функцию (nextMove), цель которой - найти путь через лабиринт, представленный матрицей 12x12 в консоли Win 32. К сожалению, когда я пытаюсь запустить его с помощью Visual Studio, сеанс консоли заканчивается аномально после нескольких десятков итераций и исчезает, не давая мне никакой информации.

Это переполнение стека?

Может быть, потому что я читаю в матрице, определяя некоторые переменные и вызывая другие функции в nextMove, что это слишком много для стека и ловца это... но я не уверен.

Рекурсивная функция ниже: (извиняется заранее, что она не выиграет конкурсы красоты и элегантности, поскольку я довольно новичок в программировании)

void nextMove(char A[size][size], int lRow, int lCol, int cRow, int cCol)
{
    A[lRow][lCol] = '.';
    A[cRow][cCol] = 'X';
    printMatrix(A);
    if (isBorder(cRow, cCol)) { return; }
    else {
        int r, c; // temporary row and col
        int lastMove = move(cRow - lRow, cCol - lCol);
        for (int i = -1; i <= 2; i++) {
            r = cRow + row((lastMove + i) % 4);
            c = cCol + col((lastMove + i) % 4);
            if (allowableMove(A, r, c)) {
                nextMove(A, cRow, cCol, r, c);
                break;
            }
        } // end for
    } // end else
} // end nextMove
  • 3
    Запустите программу из командной строки. таким образом, окно не закроется, и вы сможете увидеть любую ошибку, записанную на консоли.
  • 0
    Вы проверили, законно ли он закончен, поставив точку останова ближе к концу?
Показать ещё 11 комментариев
Теги:
recursion
stack-overflow

1 ответ

0

Извиняюсь всем, и благодарю вас за ваши ответы.

После большей отладки я нашел ответ на свой вопрос и не имеет ничего общего с переполнением стека.

Это было потому, что я предположил, что оператор C++% работает как математическая версия модульной арифметики, выводя только 0,1,..., n -1 (mod n).

Когда я понял, что это не так (-1% 4 - -1, а не 3), я смог изменить свой код, чтобы алгоритм работал правильно.

Спасибо за помощь!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню