stack overflow error - Delphi/Pascal - Programmation
Marsh Posté le 09-05-2004 à 20:51:26
mmmhhh d'accord...et sinon ça veut dire quoi stp ?? ( pardonne mon ignorance :\ ) enfin merci quand même !
Marsh Posté le 09-05-2004 à 21:23:05
à mon avis c'est une erreur dans le code. car pour remplir la pile dans une utilisation "normale" est assez rare tout de même.
ta clause de finitude est certainement fausse. Enfin si tu veux plus de détails, donne un bout de code
Marsh Posté le 09-05-2004 à 21:41:44
Quand ça m'arrivait en pascal c'est que j'avais une boucle ou une récursivité infinie. En tout cas ça venait toujours d'une erreur de prog.
Marsh Posté le 09-05-2004 à 22:34:54
Si tu passes des tableaux, structures ou chaînes en paramètre passe ça en var ou en const selon qu'ils sont modifiés ou non. Sinon le contenu est recopié sur la pile.
Marsh Posté le 10-05-2004 à 08:20:02
Bon je vous donne le détail, je dois faire l'ia du jeu des pentominos, le jeu consiste a placer des pièces (12 au total ) de 5 cases dans une grille de 8*8, le but étant que l'adversaire ne puisse plus en poser !
Ces pièces ont jusqu'a 8 dispositions differentes ( rotation et symetrie ). J'ai crée un tableau de pentomninos (la pioche )avec dedans toutes leurs dispositions, cad 12pentos*8dispos*4cases*2coordonnees ( 4 cases définies par rapport a la 1ere en haut a gauche dans un repere de gauche a droite et de haut en bas ), leurs nbre ( 2 pentos en double )
Je crée aussi une liste de cases vides representant les cases vides de la grille.
La première étape consiste a etablir une liste de coups possibles a partir de la liste de cases vides et de la pioche.
La deuxieme étape consiste a choisir le meilleur coups parmi cette liste. Je parcours cette liste de coups possible et je regarde lequel laisse le moins de coups possible pour le joueur suivant. Ce qui m'oblige a faire une copie de la pioche et de la liste cases vides car je les modifie pour simuler le nbre de possibilités suivantes.
Je suis presque sur que ça ne boucle pas a l'infini. Alors ma question est: il y a t il un moyen de vider un peu la memoire a chaque fois qu'on etudie un coup possible ??
On m'a dit qu'il y avait un peu bcp de donnees a traiter ( un tableau d'environ 800 integer a copier + liste de 64 cases a copier etc... )
Voila voila
Marsh Posté le 10-05-2004 à 10:19:25
quand tu parles de liste, c'est quoi exactement ?
Tous les objets (descendant de TObject) sont placés dans la mémoire "globale" donc ne posent pas de problème pour la pile. Le problème ce sont les structures et les tableaux qui sont, eux, sur la pile s'ils sont déclarés dans une fonction ou passés sans const ni var.
Marsh Posté le 10-05-2004 à 10:46:54
j'ai une liste de cases vides , une liste de coups possibles et un tableau de tableaux de tableaux...
Marsh Posté le 10-05-2004 à 10:51:10
"liste"... un TList ?
tes tableaux de tableaux ils sont déclarés en global, dans un objet ou dans une fonction ?
Marsh Posté le 10-05-2004 à 20:01:09
Finalement j'ai reglé le pbm en evitant les copies de tableaux enormes ! Long et chiant mais réussi !! ouf ! Merci bcp quand meme pour les tentatives d'explications
Marsh Posté le 11-01-2007 à 02:13:10
J'ai déjà eu le même problème à cause de trop grandes listes chainées. Si les listes sont trop grandes, les functions récursives s'appellent trop de fois et ça plante. (65520 c'est pas assez mais on doit faire avec.)
J'ai reglé le problème en dérécursifiant plusieurs fonctions, c'est à dire en les réécrivant en itératif.
Essaye de déterminer quelle(s) fonction(s) a(ont) le plus besoin d'être récursifiée.
Fait gaffe si tu as une fonction récursive qui en appelle une autre...
sinon pour les tableaux je ne sait pas, je m'en sert très rarement.
Marsh Posté le 09-05-2004 à 20:30:37
Pitit probleme de turbo pascal, j'ai une erreur stack overflow dont je n'arrive pas a me debarasser, a ce que j'ai compris le stack size est la taille de la pile et son max est 65520, ce que j'ai mis, et des qu'on demande trop de calcul avec du recursif ou sur de gros tableaux comme moi ( un tableau de tableaux de tableaux...oui oui !! ), la pile saute et là...c'est le drame !! Donc si qqun connait un moyen de faire dégager cette erreur sachant que le stack size est deja au taquet ça me serait trés utile: arriver a avoir cette erreur a 3 jours de la remise des projets c'est fortement balot...
Ou alors c'est que turbo pascal n'est pas fait pour les programmes relativement gros enfin je sais pas.