IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

malloc et free


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 18
    Par défaut malloc et free
    Bonjour à tous,
    Une petite question sur le fonctionnement du free, soit 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
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    typedef struct 						
    {
    	char Id[20];
    	char Affiche[60];
    } StructureListe;	
     
    void Rempli (StructureListe **Liste, unsigned int *count)
    {
      StructureListe ListeTmp;
      ....
      *count = 3;
      ListeTmp = malloc ( sizeof(StructureListe)  * count);   // 1 allocation mémoire sur pointeur local
      ......
      *Liste = ListeTmp;                             // 2 affectation valeur au paramètre
    }
     
    void main (void)
    {
      StructureListe *ListeMain;
     unsigned int CountMain;
     
      Rempli(&ListeMain, &CountMain);
      ....
      free (ListeMain);                                  // 3 libération mémoire
    }
    Au niveau du free (3) est-on sur de libérer la mémoire allouée en (1) ?

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      Rempli(&ListeMain, &CountMain);
      ....
      free (ListeMain);
    Au niveau du free (3) est-on sur de libérer la mémoire allouée en (1) ?
    Oui si, dans les points de suspensions, personne n'a modifié le pointeur ListeMain ou déjà fait le free()

    Par contre deux erreurs dans Rempli()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      StructureListe * ListeTmp;
      ....
      *count = 3;
      ListeTmp = malloc ( sizeof(StructureListe)  * *count);

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 18
    Par défaut Merci
    Citation Envoyé par diogene Voir le message
    Oui si, dans les points de suspensions, personne n'a modifié le pointeur ListeMain ou déjà fait le free()

    Par contre deux erreurs dans Rempli()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      StructureListe * ListeTmp;
      ....
      *count = 3;
      ListeTmp = malloc ( sizeof(StructureListe)  * *count);
    Ok merci pour cette confirmation.
    La fonction Rempli() était mal écrite.

    Puisque le gestionnaire de mémoire mémorise la quantité de mémoire allouée à un pointeur, une question induite :
    Est-il possible de lire la mémoire allouée à un pointeur ?

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Puisque le gestionnaire de mémoire mémorise la quantité de mémoire allouée à un pointeur, une question induite :
    Est-il possible de lire la mémoire allouée à un pointeur ?
    La mémoire n'est pas allouée ici à un pointeur, c'est l'adresse de la mémoire allouée qui est mise dans le pointeur.
    On ne peut savoir la quantité de mémoire allouée dont l'adresse figure dans le pointeur (ListeTmp ) . Si on en a besoin ultérieurement, il faut conserver cette valeur dans une variable (à moins qu'elle soit définie par un constante style #define).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. besoin d'eclaircissement sur malloc et free
    Par Jackyzgood dans le forum C
    Réponses: 8
    Dernier message: 08/02/2010, 16h40
  2. malloc et free pour une liste de 504 bytes
    Par le mage tophinus dans le forum Langage
    Réponses: 2
    Dernier message: 30/10/2008, 11h22
  3. malloc et free en C
    Par aymeric2k dans le forum Bibliothèque standard
    Réponses: 9
    Dernier message: 09/12/2007, 18h04
  4. malloc et free
    Par petdelascar dans le forum C
    Réponses: 6
    Dernier message: 15/01/2006, 21h08
  5. malloc et free
    Par barthelv dans le forum C
    Réponses: 3
    Dernier message: 22/07/2003, 18h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo