Stack overflow !!!! [Résolu]

Messages postés
55
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
1 novembre 2008
- - Dernière réponse : cs_azamharir
Messages postés
55
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
1 novembre 2008
- 24 févr. 2007 à 13:10
salut, je fais un jeux de taquin en C++ avec visual studio 6.0.

j'utilise la recherche en profondeur, Hill climging et A* chaque et un programme à part.

pour la recherche en profondeur j'ai eu l'erreur stack overflow.

j'utilise un arbre comme structure et à l'aide d'une fct récursive je
construit cet arbre et cherche la solution en meme temps, mais apres
10333 appel recursif, le programme s'arrete.

en debuggant  j'ai trouvé que l'erreur est stack overflow.

question : peut on  augmenter cette pile?  si vous avez des idées pour 
résoudre mon probleme sans  changer la  fct  recursive par une autre
itérative, svp partagez les avec moi?

merci et @++ 
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
17
3
Merci
Salut,
je crois que VC6 alloue 1MO par défaut pour la pile, on peut toujours l'augmenter avec l'option  :
/STACK:reserve[,commit]
de l'éditeur de lien. Exemple :
/STACK:1048576,4096

ou option
Propriétés projet/linker/systeme/taille de réserve de pile/

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 158 internautes nous ont dit merci ce mois-ci

Commenter la réponse de yann_lo_san
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
0
Merci
Si tu as plusieurs params à ta fonction, tu fais une struct et tu en passes l'adresse, ainsi que 4 octets par tour sur la pile (enfin presque...).

La seule vraie solution restera malgré tout de virer la récursivité, c'est une nuisance pour les perfs et pour la pile.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
55
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
1 novembre 2008
0
Merci
salut
[auteurdetail.aspx?ID=39449 BruNews] 
pour les parametres c juste 1:     bool arbre::profondeur(noeud*)
pour les 4 octets, on fais comment?
merci et @++

 
Commenter la réponse de cs_azamharir
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
0
Merci
Chaque param sur system 32 bits est de 4 octets, rien à faire de spécial.
Mais comme EIP est empilé en 1er, ça t'en fait 8.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
55
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
1 novembre 2008
0
Merci
salut
[auteurdetail.aspx?ID=39449 BruNews] donc comme t'as dit la seule solution est d'enlever la recursivité.
mais une fct iterative pour un arbre!!!
merci bien pour la rapidité de la reponse. je vais essayer de combiner les 2.
merci et @++
Commenter la réponse de cs_azamharir
Messages postés
55
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
1 novembre 2008
0
Merci
salut



[auteurdetail.aspx?ID=195004 yann_lo_san], ta reponse prouve qu'avant de poser une question sur ce site, il faut voir la MSDN avant.
j'accepte ta reponse. mais  39375  appels recursifs pour un exemple sans la recursivité pour afficher le chemin de la solution c trop. La solution idéale c de convertir en iteratif.
Commenter la réponse de cs_azamharir