[VC++] Stack overflaw

Stack overflaw [VC++] - Programmation

Marsh Posté le 17-05-2001 à 13:58:33    

j'ai fais une fonction de récurtion qui a mon avis ne plante pas, mais requiert un nombre tres important de recursions, mon prog marche plus à la 17151 eme.
 
est ce que l'on peut agrandir le truc stack ou pas ?


---------------
"l'homme est un loup pour l'homme"
Reply

Marsh Posté le 17-05-2001 à 13:58:33   

Reply

Marsh Posté le 17-05-2001 à 14:00:34    

juldjin a écrit a écrit :

j'ai fais une fonction de récurtion qui a mon avis ne plante pas, mais requiert un nombre tres important de recursions, mon prog marche plus à la 17151 eme.
 
est ce que l'on peut agrandir le truc stack ou pas ?




Oui on peut :D
Mais est-il raisonnable de faire plus de 17150 recursions ?

Reply

Marsh Posté le 17-05-2001 à 14:02:15    

ben dans la mesur ou je doit reconnaitre des formes de tres grandes tailles sur des images de tres grandes tailles, je n'ai pas trop le choix... :sarcastic:

Reply

Marsh Posté le 17-05-2001 à 14:09:08    

si, y'a toujours le choix ;)
soit tu derecurssifie a la main et la c'est toi qui gere la taille de la pille (c'est pas dur, faut juste etre methodique)
soit tu changes d'algo

 

[edit]--Message édité par wpk--[/edit]

Reply

Marsh Posté le 17-05-2001 à 14:12:36    

voici ma fonction qui compte le nombre de pixels par formes :
 
void MONIMAGESEGM::compte(int x,int y,int &somme)
{  
   if (x<0 || x>=im.tailleX || y<0 || y>=im.tailleY)  
      return; // si les coordonnées de la case à tester ne sont pas valides  
   else if (temp[x][y] == -1 || temp[x][y] == 1)  
      return; // si la case a déjà été marquée ou n'appartient pas à la forme  
   else  
   {  
      temp[x][y]=1; // on marque la case  
      somme++;  // on ajourte 1 au nombre de pixels de la forme  
   
   if(x > 0) compte(x-1,y,somme);
   if(x < im.tailleX - 1) compte(x+1,y,somme);
   if(y > 0) compte(x,y-1,somme);
   if(y < im.tailleY - 1) compte(x,y+1,somme);
   if(x > 0 && y > 0) compte(x-1,y-1,somme);
   if(x > 0 && y < im.tailleY - 1) compte(x-1,y+1,somme);
   if(x < im.tailleX - 1 && y > 0) compte(x+1,y-1,somme);
   if(x < im.tailleX - 1 && y < im.tailleY - 1) compte(x+1,y+1,somme);
   }  
}  
 
imaginé si une forme fait la moitié d'une image de 1024*768... :cry:  :cry:  :cry:  :cry:

Reply

Marsh Posté le 17-05-2001 à 14:12:44    

voici ma fonction qui compte le nombre de pixels par formes :
 
void MONIMAGESEGM::compte(int x,int y,int &somme)
{  
   if (x<0 || x>=im.tailleX || y<0 || y>=im.tailleY)  
      return; // si les coordonnées de la case à tester ne sont pas valides  
   else if (temp[x][y] == -1 || temp[x][y] == 1)  
      return; // si la case a déjà été marquée ou n'appartient pas à la forme  
   else  
   {  
      temp[x][y]=1; // on marque la case  
      somme++;  // on ajourte 1 au nombre de pixels de la forme  
   
   if(x > 0) compte(x-1,y,somme);
   if(x < im.tailleX - 1) compte(x+1,y,somme);
   if(y > 0) compte(x,y-1,somme);
   if(y < im.tailleY - 1) compte(x,y+1,somme);
   if(x > 0 && y > 0) compte(x-1,y-1,somme);
   if(x > 0 && y < im.tailleY - 1) compte(x-1,y+1,somme);
   if(x < im.tailleX - 1 && y > 0) compte(x+1,y-1,somme);
   if(x < im.tailleX - 1 && y < im.tailleY - 1) compte(x+1,y+1,somme);
   }  
}  
 
imaginé si une forme fait la moitié d'une image de 1024*768... :cry:  :cry:  :cry:  :cry:

Reply

Marsh Posté le 17-05-2001 à 14:27:43    

Ouais ben c'est un boulot de sagouin :D

Reply

Marsh Posté le 17-05-2001 à 14:42:38    

surtout qu'il y'a des methodes topologiques pour faire ca... et t'as plus du tout de recurss.

Reply

Marsh Posté le 17-05-2001 à 14:45:03    

je pense qu'il est possible d'ameliorer un peu cet algo et c'est evident que pour ce genre de probleme, la recursivité n'est pas le meilleur choix (meme si c'est plus facile a programmer).
 
Faut reflechir un peu en fait !!!

Reply

Marsh Posté le 17-05-2001 à 14:47:29    

ouais mais moi je suis pas un maitre en algorithmes :jap:  
 
apres je vais exporter les formes en .shp alors respect comme meme pour un stagiaire de dut info...
 
merci
 
et si vous avez d'autres solutions a me proposer faites offre

Reply

Sujets relatifs:

Leave a Replay

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