IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Récursivité - Stack Overflow


Sujet :

Langage Delphi

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Récursivité - Stack Overflow
    Bonjour,

    Afin de supprimer certains fichiers, j'utilise depuis un bon bout de temps une fonction récursive qui fait correctement le travail. Cependant, voilà que le logiciel plante sur un ordinateur avec l'erreur Stack Overflow. Je doute que ce soit dû à une boucle qui tourne à l'infini (le logiciel fonctionne parfaitement sur les autres machines), donc je me penche plus pour une récursivité trop profonde qui fait déborder la pile. Voici ma procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    function slach(chemin : string) : string;
    begin
     chemin := trim(chemin);
     if rightstr(chemin, 1) <> '\' then result := chemin + '\' else result := chemin;
    end;
     
    procedure ScanFiles(NomDossier : string ; subFolder : boolean);
    var
     hFind : TSearchRec;
    begin
     NomDossier := slach(NomDossier);
     if FindFirst(NomDossier + '*.*', FaAnyFile, hFind) = 0 then
     begin
      repeat
       if (hFind.Attr and faDirectory) <> faDirectory then
       begin
        Application.ProcessMessages;
        DeleteFile(NomDossier + hFind.Name);
       end else
       begin
        if (hFind.Name <> '.') and (hFind.Name <> '..') then
         if subFolder = True then ScanFiles((slach(NomDossier) + hFind.Name), subFolder);
       end;
      until FindNext(hFind) <> 0;
      FindClose(hFind);
      Application.ProcessMessages;
     end;
    end;
    Que faire pour empêcher cette erreur ?

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 871
    Points : 11 361
    Points
    11 361
    Billets dans le blog
    6
    Par défaut
    effectivement, pas de cause évidente...

    tu peux essayer de modifier la taille de la pile (options du projet) ou utiliser un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function DeleteFiles(...): Boolean;
    begin
      try
        Scanfile(...);
        Result:=True; 
      except
        Result:=False;
      end;
    end;
     
    //...
    i:=0;
    while not DeleteFiles() and (i<TooManyAttempts) do Inc(i);
    // à agrémenter !

  3. #3
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 851
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 851
    Points : 15 265
    Points
    15 265
    Par défaut
    Salut !
    Citation Envoyé par Forever1213 Voir le message
    Que faire pour empêcher cette erreur ?
    Essayer d'augmenter la taille de la pile ? sous D7 : Projet --> Options --> Lieur --> Taille de mémoire --> Pile maximum et doubler la valeur ?
    Mes 2 cts et bon dimanche,
    --
    jp

Discussions similaires

  1. Stack OverFlow et récursivité
    Par Noxalus dans le forum C#
    Réponses: 2
    Dernier message: 28/01/2010, 16h53
  2. Stack Overflow : (FloodFill) récursivité sur tableau de pixels
    Par Xplik dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 27/03/2009, 22h32
  3. Stack OverFlow
    Par Goundy dans le forum Langage
    Réponses: 2
    Dernier message: 24/12/2005, 21h35
  4. Problème de stack overflow
    Par heider dans le forum Langage
    Réponses: 13
    Dernier message: 22/09/2005, 19h50
  5. Stack overflow
    Par portu dans le forum Langage
    Réponses: 3
    Dernier message: 26/11/2003, 15h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo