处理完成,退出代码为-1073741571

Sal*_*ali 16 python recursion error-code

我有一个递归函数,它正在寻找欧拉路径.我不认为函数的定义是相关的(但如果有人这么认为,我也会粘贴它).

问题是当我运行带有大图的函数时,我收到以下众所周知的错误:RuntimeError:cmp中超出了最大递归深度

即使没有上述问题,我也知道我需要使用以下命令增加递归限制

import sys
sys.setrecursionlimit(5000)
Run Code Online (Sandbox Code Playgroud)

问题是,无论我使用的是什么号码,我都会得到最大递归错误或我的程序暂停,屏幕上没有输出但是:进程以退出代码-1073741571结束.我试图谷歌这个代码,我能找到的唯一问题是Ruby中的问题.知道如何克服这个问题.

如果这是相关的我在Windows 8 64位,我有足够的RAM,我有64位python.

仅仅因为出于某种原因这个问题最近得到了一些关注,我想强调一下我无法找到问题的解决方案.在无可救药地试图解决问题之后,我放弃了并且在没有递归的情况下重写了它.这也很烦人,但是我花了很少的时间重写整个算法,而不是我花在调查这个问题上.我还想提一下,我没有以前的递归代码,所以我将无法复制问题.

ret*_*ian 7

那是Microsoft的“堆栈溢出/堆栈耗尽”错误代码0xC00000FD的有符号整数表示形式。

您可以按照此处答案中的说明尝试增加可执行文件的堆栈大小: 如何克服Visual Studio的堆栈大小问题(使用大数组运行C代码)

每当您在Windows中看到奇怪的大型负退出代码时,请将其转换为十六进制,然后在ntstatus错误代码中查找它们http://msdn.microsoft.com/zh-cn/library/cc704588.aspx

  • 这应该是公认的答案,它是正确的。重要的是要提到您检查有符号整数的“DWORD”(32 位)值。如果您不小心将其转换为“QWORD”(Windows Calc 上的默认值),它将在左侧填充“FFFF FFFF”(或者您可以删除它们,其余的将是正确的值)。 (2认同)

小智 7

你可以使用类似的东西:

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

这解决了我的递归限制和我的堆大小限制.