Bonjour. Je suis entrain de realiser un programme qui , a partir d'une chaine de caractere saisie, genere toutes les combinaisons possibles avec les caracteres de la chaine, les combinaisons, ont des longueurs qui vont de 1 a strlen(chaine_depart). le choix fut porté sur l'utilisation d'une fonction recursive. Selon different tests fait sur le programme, il s'es revelé operationnel pour 7 carctere, au dela de cette limite , la fenetre de la console se ferme automatiquement, en mod debogague , on constate un essai d'acceder a l'adresse nulle , ce qui me laisse supposer un debordement de la pile. j'etale mon code ici (excusez les erreurs d'orthographes )

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
 
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
 
int *toutlemondemeconnais ;
char *filtrer (char *chaine, char car)
    { 
      int longueur = strlen(chaine);        
      int true = 1;
      char *res = (char*) malloc ((longueur+1)*sizeof(char));
      int j=0;
      int i = 0;
      while ((i<= longueur) && chaine[i])
        { if ((chaine[i] == car) && true ) 
           {             i++;
                         true = 0;
                         continue ;
           }        
          res[j] = chaine[i];
            i++;
            j++;
        }
            res[j] = 0;
            return (res);
    }
void recursive (char *pile,char *reserve , int taille, int taillei)
  { 
    char *piles;
    char *reserves;
 
    int i;
    int L = taille - taillei;
     if (pile[0])  printf("%s \n",pile); 
 
 
 
    if (taille == 0) return ;
      for (i = 0; i < taille ; i++)
 
             {    
                  piles = (char*)malloc ( (taillei - taille +1) * sizeof (char));
 
                  reserves =(char*) malloc ( (taille +1) * sizeof (char));                 
                   if (piles== NULL) return;
                   if (reserves ==NULL) return ;
                  strcpy ( piles, pile);
                  strcpy (reserves , reserve);
                  piles[taillei- taille]= reserve [i];
                  piles[taillei - taille +1] = 0;
                  recursive (piles,filtrer (reserves,reserves[i]), taille - 1,taillei);
                  (*toutlemondemeconnais)++;  
                 free (piles);
                 free (reserves);
              }  
        return;
 
 
    }
 
 
 
 
 
int main ()
   { 
     int i; 
     char atraiter[100];
     toutlemondemeconnais = (int*) malloc (sizeof (int));
     (*toutlemondemeconnais) = 0;  
     char *magasin;   
     char *depot;
     printf ("\n saisir une chaine de caractere ");
        scanf ("%s", atraiter);
        printf("les combinaisons possibles sont : \n");
     int metre = strlen (atraiter);
     magasin = (char *) malloc ((metre+1) * sizeof (char));
      depot = (char *) malloc ((metre+1)* sizeof (char));
        magasin[0]=0;
 
        strcpy (depot, atraiter);
        recursive (magasin, depot, strlen(depot),metre);
        printf (" \n le nbre de combinaisons est %d \n", *toutlemondemeconnais);
        system ("pause");
 
        return 0;
}
je precise que la fonction filtrer qui a pour argument une chaineQLQ de caractere et un caractere, rend un pointeur sur la chaine ChaineQLQ - { caractere} .

Si on peut eclairer ma lanternne, si effectivement la deffaillance quand on lui fournit 8 caractere reviens a une erreur involontaire de programation, ou vraiment a un depassement de la pile, et si il y a moyen de remedier a cela. Cordialement.

ps : si quelqu'un a des questions concernant le code , qu'il n'hesite pas
ps2 : si le moyen de remedier au probleme est une refonte de l'algorithme, merci de me signaler seulement la partie qui cause probleme.