Allocation mémoire & structure de pointeurs
Résolu/Fermé
Erdouh
Messages postés
7
Date d'inscription
vendredi 8 novembre 2013
Statut
Membre
Dernière intervention
1 mars 2014
-
Modifié par Erdouh le 9/11/2013 à 22:39
Erdouh Messages postés 7 Date d'inscription vendredi 8 novembre 2013 Statut Membre Dernière intervention 1 mars 2014 - 9 nov. 2013 à 22:58
Erdouh Messages postés 7 Date d'inscription vendredi 8 novembre 2013 Statut Membre Dernière intervention 1 mars 2014 - 9 nov. 2013 à 22:58
A voir également:
- Allocation mémoire & structure de pointeurs
- Mémoire vive - Guide
- Logiciel calcul structure bois gratuit - Télécharger - Architecture & Déco
- Structure d'un rapport de stage - Guide
- Test memoire pc - Guide
- Nettoyer memoire iphone - Guide
1 réponse
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 228
Modifié par gravgun le 9/11/2013 à 22:18
Modifié par gravgun le 9/11/2013 à 22:18
Bonsoir, ta structure mastruct ressemblera à ça en mémoire (en assumant un CPU 32 bits; les pointeurs 64 font 8 octets):
Pour ta fonction qui créé cette structure, elle se charge de l'allocation avec malloc, ce qui fait que la "valeur" de
Les membres toto et tata sont des pointeurs eux aussi (imagine que çe sont des int); mais ils peuvent contenir des valeurs aléatoires: malloc ne nettoie pas la mémoire qu'on demande avant de nous passer le pointeur, d'où l'intéret de calloc qui met tout à zéro, donc les pointeurs toto et tata seront 0, donc NULL.
Ta ligne
Pour y accéder, la notation peut être ambigüe donc je préfère tout faire en explicite avec des parenthèses:
from human import idiocy
del idiocy
[4 octets pour toto][4 octets pour tata]Cette configuration sera toujours la même, et sizeof(mastruct) renverra 8, car mastruct occupe toujours 8 octets en mémoire.
Pour ta fonction qui créé cette structure, elle se charge de l'allocation avec malloc, ce qui fait que la "valeur" de
cse trouve dans le heap, la mémoire que tu gères toi même avec malloc/calloc, realloc et free. On demande donc a allouer 8 octets, et on récupère le pointeur vers ces 8 octets dédiés à notre structure.
ccontient donc l'adresse mémoire vers la structure, c'est juste un int en réalité, mais qui indique un emplacement.
Les membres toto et tata sont des pointeurs eux aussi (imagine que çe sont des int); mais ils peuvent contenir des valeurs aléatoires: malloc ne nettoie pas la mémoire qu'on demande avant de nous passer le pointeur, d'où l'intéret de calloc qui met tout à zéro, donc les pointeurs toto et tata seront 0, donc NULL.
Ta ligne
c->toto=(int*)malloc(sizeof(int));ne te semble pas correcte, mais elle l'est parfaitement, on associe un nouveau pointeur à toto de c, le tout joliment casté et avec la bonne taille.
Pour y accéder, la notation peut être ambigüe donc je préfère tout faire en explicite avec des parenthèses:
*(c->toto). Explication:
cest un pointeur de mastruct,
->récupères un membre de la struct pointée. On a donc récupéré un pointeur, et on veut sa valeur pointée, qui s'obtient avec
*.
from human import idiocy
del idiocy
Modifié par Erdouh le 9/11/2013 à 23:12