Процесс завершен с кодом выхода -1073741571

У меня есть функция рекурсии, которая находит путь Эйлера. Я не думаю, что определение функции уместно (но если кто-то так думает, я тоже вставлю это).

Проблема в том, что когда я запускаю функцию с большим графиком, я получаю следующую хорошо известную ошибку: RuntimeError: максимальная глубина рекурсии превышена в cmp

Даже без вышеупомянутого вопроса я знаю, что мне нужно увеличить предел рекурсии с помощью следующих команд

import sys
sys.setrecursionlimit(5000)

Проблема заключается в том, что, независимо от того, какой номер я использую, я либо получаю сообщение об ошибке Максимальная рекурсия, либо моя программа просто останавливается без вывода на экран, но: Процесс завершен с кодом выхода -1073741571. Я попытался найти этот код в Google, и единственной проблемой, которую я смог найти, была проблема в Ruby. Любая идея, как я могу преодолеть эту проблему.

Если это уместно, я на Windows 8 64-битной, у меня много оперативной памяти, и у меня есть 64-битный Python.

Просто потому, что по какой-то причине этому вопросу недавно было уделено некоторое внимание, я хочу подчеркнуть, что мне не удалось найти решение этой проблемы. После безнадежной попытки решить проблему я сдался и переписал ее без рекурсии. Также это раздражало, но я потратил гораздо меньше времени на переписывание всего алгоритма, чем на изучение этой проблемы. Я также хочу отметить, что у меня нет предыдущего кода рекурсии, поэтому я не смогу воспроизвести проблему.

2 ответа

Это целочисленное представление со знаком Microsoft для кода ошибки "переполнение стека / исчерпание стека" 0xC00000FD.

Вы можете попытаться увеличить размер стека вашего исполняемого файла, как описано в ответе здесь: Как решить проблему размера стека в Visual Studio (запуск кодов C с большим массивом)

Каждый раз, когда вы видите странные, большие отрицательные коды выхода в Windows, преобразуйте их в шестнадцатеричные и затем найдите их в кодах ошибок ntstatus http://msdn.microsoft.com/en-us/library/cc704588.aspx

Вы можете использовать что-то вроде:

if __name__ == '__main__':
    sys.setrecursionlimit(100000)
    threading.stack_size(200000000)
    thread = threading.Thread(target=your_code)
    thread.start()

Это решило мое ограничение рекурсии и ограничение размера кучи.

Другие вопросы по тегам