Allocation dynamique de structure et organisation de la mémoire
Salut,
J'aurais une question relative à l'allocation dynamique de structures. La réponse est sans doute triviale, mais quelque chose m'échappe :(
Je possède les structures suivantes :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
typedef struct {
S_STRUCT2 *ps_struct2;
} S_STRUCT;
typedef struct {
S_STRUCT3 *ps_struct3;
S_STRUCT4 *ps_struct4;
} S_STRUCT2;
typedef struct {
S_STRUCT5 *ps_struct5;
} S_STRUCT3; |
Et le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10
|
S_STRUCT *ps_struct;
int nb_elements = 2000;
int nb_max_points = 1000;
ps_struct->ps_struct2 = (S_STRUCT2 *) malloc(nb_elements * sizeof(S_STRUCT2)));
ps_struct->ps_struct2->ps_struct4 = (S_STRUCT4 *) malloc(nb_elements * sizeof(S_STRUCT4)));
ps_struct->ps_struct2->ps_struct3 = (S_STRUCT3 *) malloc(nb_elements * sizeof(S_STRUCT3)));
ps_struct->ps_struct2->ps_struct3->ps_struct5 = (S_STRUCT5 *) malloc(nb_max_points * sizeof(S_STRUCT5))); |
J'alloue donc la mémoire qu'il me faut.
Cependant je cherche à savoir comment va s'organiser la mémoire.
En gros j'essaie d'accéder à (ps_struct->ps_struct2 + 1)->ps_struct4 qui s'avère être vide.
Même chose pour (ps_struct->ps_struct2 + 1)->ps_struct3
Par contre quand je fais (ps_struct->ps_struct2->ps_struct4 + 1) j'accède bien à ma structure (toutefois je retrouve le même problème avec ps_struct5 qui ne m'est pas accessible dans ps_struct3.
Je supposais que la mémoire s'organisait de sorte que l'espace mémoire soit réparti entre les différents éléments des structures. Mais apparemment ça ne marche pas comme cela.
Savez-vous s'il y a moyen de répartir la mémoire de sorte que (ps_struct->ps_struct2 + 1)->ps_struct3 par exemple ne soit plus vide mais déjà alloué ? Ou dois-je faire moi même la correspondance entre les éléments du gros bloc alloué et les structures ?
Je ne sais pas si je suis super clair :/ Pas facile de présenter clairement mon problème. Je peux essayer de mieux expliquer si personne n'arrive à comprendre ma question.
Si jamais quelqu'un à une éventuelle piste à mon donner, j'en serais très heureux. J'ai passé ma journée à essayer de comprendre pourquoi j'avais des structures non allouées, et je ne comprends toujours pas d'ailleurs ^^
Un grand merci d'avance