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 : 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;
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
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 ^^