web-dev-qa-db-fra.com

Processus terminé avec le code de sortie -1073741571

J'ai une fonction de récursion qui trouve le chemin d'Euler. Je ne pense pas que la définition de la fonction soit pertinente (mais si quelqu'un le pense, je la collerai également).

Le problème est que lorsque j'exécute la fonction avec un gros graphique, je reçois l'erreur bien connue suivante: RuntimeError: profondeur de récursivité maximale dépassée en cmp

Même sans la question susmentionnée, je sais que je dois augmenter la limite de récursivité avec les commandes suivantes

import sys
sys.setrecursionlimit(5000)

Le problème est que, quel que soit le numéro que j'utilise, j'obtiens l'erreur de récursivité maximale ou mon programme s'arrête sans aucune sortie à l'écran mais: Processus terminé avec le code de sortie -1073741571 . J'ai essayé de google pour ce code et le seul problème que j'ai pu trouver était le problème dans Ruby. Toute idée comment je peux surmonter ce problème.

Si cela est pertinent, je suis sur Windows 8 64 bits, j'ai beaucoup de RAM et j'ai du python 64 bits.

Juste parce que pour une raison quelconque, cette question a récemment retenu l'attention , je tiens à souligner que je n'ai pas pu trouver de solution au problème. Après avoir désespérément essayé de résoudre le problème, j'ai abandonné et l'ai réécrit sans récursivité. C'était aussi ennuyeux, mais j'ai passé beaucoup moins de temps à réécrire tout l'algorithme que j'ai passé à enquêter sur ce problème. Je veux également mentionner que je n'ai pas de code de récursivité précédent, donc je ne pourrai pas reproduire le problème.

17
Salvador Dali

Vous pouvez utiliser quelque chose comme:

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

Cela a résolu à la fois ma limitation de récursivité et ma limitation de taille de tas.

8
Juan Pablo VEGA

Il s'agit de la représentation entière signée du code d'erreur 0xC00000FD de "débordement de pile/épuisement de pile" de Microsoft.

Vous pouvez essayer d'augmenter la taille de la pile de votre exécutable comme décrit dans la réponse ici: Comment surmonter le problème de taille de pile avec Visual Studio (exécuter des codes C avec un grand tableau)

Chaque fois que vous voyez d'étranges codes de sortie négatifs importants dans Windows, convertissez-les en hexadécimal, puis recherchez-les dans les codes d'erreur ntstatus http://msdn.Microsoft.com/en-us/library/cc704588.aspx

7
reteptilian