Bonjour vous
Tout nouveau sur ce forum, je me permet de poser une question

Je suis entrain de creer une fonction recursive visant a creer un tableau qui contiendra un triangle de sierpinsky (c'est une fractale).
J'ai une consigne quand aux donnees envoyees a la fonction : uniquement une puissance de deux qui sera la taille du tableau

A chaque appel de la fonction, je recupere le tableau qui se remplit donc au fur et a mesure
Comme on ne sait pas quelle taille fera le triangle, le tableau est alloue dynamiquement : pour liberer la memoire, j'utilise bien sur free(array). Mon probleme vient du fait que je ne peux pas liberer la memoire APRES le retour de la fonction et que si je libere la memoire avant, je ne peux pas renvoyer le tableau.

Voila des portions de mon code pour etre plus clair :

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
int main()
{
  int i, j, power;
  int **sierpinsky_a = NULL;
 
  /* On prend par exemple power = 16 */
  power = 16;
  [...] /* Allocation Dynamique du tableau a deux dimensions **sierpinsky_a */
  **sierpinsky_a = create_array(power);
  [...] /* Traitement du tableau retourne puis liberation de la memoire. */
  return (0);
}
 
int create_array(int power)
{
  int i, j, k, l, sier_size, temp_size;
  int **sierpinsky_a = NULL;
  int **temp_a = NULL;
 
  [...] /* Allocation dynamique de mes deux tableaux et initialisations des variables */
  if (power > 2)
    {
       **sierpinsky_a = create_array(power/2);
    }
  [...] /* Remplissage du tableau temp_a par rapport a sierpinsky_a */
 
  for (i = 0; i < sier_size; i++)
    {
       free(sierpinsky_a);
    }
   free(sierpinsky_a);
   return (**temp_a);
  /* Et c'est pour ce return que ca peche : je peux pas le desallouer ici, ni plus haut. */ 
}
Merci pour votre aide qui me sera surement precieuse. C'est pas la premiere fois que j'ai ce probleme.