web-dev-qa-db-ja.com

プロセスは終了コード-1073741571で終了しました

オイラー経路を見つける再帰関数があります。関数の定義が適切であるとは思いません(誰かがそうだと思ったら、貼り付けます)。

問題は、大きなグラフで関数を実行しているときに、次のよく知られているエラーが表示されることです RuntimeError:最大再帰深度がcmpを超えています

上記の質問がなくても、次のコマンドで再帰制限を増やす必要があることを知っています

import sys
sys.setrecursionlimit(5000)

問題は、使用している数値に関係なく、最大再帰エラーが発生するか、プログラムが画面に何も出力されずに停止するだけですが、プロセスが終了コード-1073741571。私はこのコードをグーグルで検索しようとしましたが、見つけることができた唯一の問題はRubyの問題でした。どのように私がこの問題を克服できるかについての考え。

これが関連する場合、私はWindows 8 64ビットを使用しています。RAMがたくさんあり、64ビットのpythonを持っています。

何らかの理由でこの質問が最近いくつかの注目を集めたため、問題の解決策を見つけることができなかったことを強調したいと思います。どうしようもなく問題を解決しようとした後、私はあきらめて再帰せずに書き直しました。また、煩わしいものでしたが、この問題の調査に費やすよりも、アルゴリズム全体を書き換えるのに費やす時間を大幅に短縮できました。また、以前の再帰コードがないため、問題を再現することはできません。

17
Salvador Dali

あなたは次のようなものを使うことができます:

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

これにより、再帰の制限とヒープサイズの制限の両方が解決されました。

8
Juan Pablo VEGA

これは、Microsoftの「スタックオーバーフロー/スタック枯渇」エラーコード0xC00000FDの符号付き整数表現です。

ここでの回答に記載されているように、実行可能ファイルのスタックサイズを大きくしてみてください: Visual Studioでスタックサイズの問題を克服する方法(大きな配列でCコードを実行)

Windowsで奇妙な大きな負の終了コードが表示されたら、それらを16進数に変換してから、ntstatusエラーコード で調べてください。http://msdn.Microsoft.com/en-us/library /cc704588.aspx

7
reteptilian