stack overflow error

stack overflow error - Delphi/Pascal - Programmation

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.

Reply

Marsh Posté le 09-05-2004 à 20:30:37   

Reply

Marsh Posté le 09-05-2004 à 20:32:53    

passe en itératif, quitte à simuler une pile

Reply

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 !

Reply

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

Reply

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.

Reply

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.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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

Reply

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.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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...

Reply

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 ?


Message édité par antp le 10-05-2004 à 10:51:26

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 10-05-2004 à 10:51:10   

Reply

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

Reply

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 :fou: 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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed