Bonjour,
Je me heurte à un problème d'allocation mémoire avec des structures contenant des tableaux. Voici le code de mes déclarations, sachant que N est une constante :
J'ai une fonction d'allocation qui réserve l'espace mémoire et initialise les variables :
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 /* Structure d'une case */ typedef struct { int clef; /* Clef de l'enregistement */ int rang; /* Rang de l'enregistrement dans le fichier */ } Tcase; /* Structure d'une page */ typedef struct Tpage { Tcase page[2*N-1]; /* Une page est composée de 2*N cases */ struct Tpage *fils[2*N]; /* Une page possède 2*N+1 fils qui sont des pages */ } Tpage;
A l'exécution et au débogage, je me rends compte que la taille de la mémoire réservée pour le premier tableau de Tpage (et sûrement le second aussi) est insuffisante : il manque un "emplacement". J'ai l'impression que le sizeof prends comme taille pour les tableaux le nombre déclaré et non celui de la taille réelle du tableau (avec l'indice 0 ...).
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 Tpage *Allocation(Tpage *arbre) { int i; arbre=malloc(sizeof(Tpage)); for (i=0;i<2*N;i++){ arbre->page[i].clef=-1; arbre->page[i].rang=-1; arbre->fils[i]=NULL; } arbre->fils[2*N]=NULL; return arbre; }
Ajouter 1 à la taille des tableaux résous le problème mais en créé un nouveau : dans le cas de la déclaration d'une variable de type Tpage je me retrouve avec des tableaux trop grands, ça n'est pas excessivement gênant mais j'aimerai quand même éviter.
Est-ce que j'ai bien identifié le problème ? Existe-t-il une bonne alternative à la solution primaire que j'y ai apporté ? J'ai consulté un maximum de cours, tutos, ... avant de venir en parler mais je n'ai rien trouvé de probant. Si vous avez mieux, merci de répondre ^^
Partager