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 :
Et le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
J'alloue donc la mémoire qu'il me faut.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)));
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
Partager