Stack overflow !!!!

Résolu
cs_azamharir Messages postés 55 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 1 novembre 2008 - 23 févr. 2007 à 17:58
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 @++ 

6 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 25
24 févr. 2007 à 01:08
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/
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 févr. 2007 à 18:21
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++
0
cs_azamharir Messages postés 55 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 1 novembre 2008
23 févr. 2007 à 18:36
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 @++

 
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 févr. 2007 à 18:39
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++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_azamharir Messages postés 55 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 1 novembre 2008
23 févr. 2007 à 18:53
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 @++
0
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



[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.
0
Rejoignez-nous