allocations, structures, tableaux
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 :
Code:
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; |
J'ai une fonction d'allocation qui réserve l'espace mémoire et initialise les variables :
Code:
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;
} |
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 ...).
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 ^^