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 :

free/malloc


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 28
    Points : 25
    Points
    25
    Par défaut free/malloc
    bonjour,

    Peux t-on libérer de la memoire allouée avec malloc en plusieurs fois sans risques ?

    par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      void *p = malloc( size + surplus);
      char* pc = (char*) p;
      free (pc+surplus);
      ....
       free (pc);
    le but est de tracer la memoire allouée en la marquant et de tout libérer plus tard.

  2. #2
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut Re: free/malloc
    Citation Envoyé par Duguesclin
    bonjour,

    Peux t-on libérer de la memoire allouée avec malloc en plusieurs fois sans risques ?

    par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      void *p = malloc( size + surplus);
      char* pc = (char*) p;
      free (pc+surplus);
      ....
       free (pc);
    le but est de tracer la memoire allouée en la marquant et de tout libérer plus tard.
    Non, il faut passer a free() l'adresse qui a ete retourner par malloc().

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: free/malloc
    Citation Envoyé par Duguesclin
    Peux t-on libérer de la memoire allouée avec malloc en plusieurs fois sans risques ?
    Non. Le comportement est indéfini, il peut arriver n'importe quoi (des segfaults ont été signalés).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      void *p = malloc( size + surplus);
      char* pc = (char*) p;
      free (pc+surplus);
      ....
       free (pc);
    le but est de tracer la memoire allouée en la marquant et de tout libérer plus tard.
    C'est totalement interdit. La valeur passée à free() doit être exactement celle reçue de malloc(), sinon le comportement est indéfini.
    Ce que tu veux faire n'est pas possible. Si tu y tiens, tu peux redimensionner la zone allouée avec realloc(). A toi de maintenir la taille allouée quelque part. Ceci peut aider:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct buf
    {
       size_t size;
       void *buf;
    };
    Pas de Wi-Fi à la maison : CPL

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 28
    Points : 25
    Points
    25
    Par défaut
    merci pour vos réponses, il faut que je revois ma copie

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

Discussions similaires

  1. Free, malloc et DLL
    Par Pikwik dans le forum Windows
    Réponses: 14
    Dernier message: 13/06/2008, 14h53
  2. probleme free heap block lors d'un malloc
    Par gronaze dans le forum C
    Réponses: 2
    Dernier message: 24/03/2006, 15h01
  3. Réponses: 3
    Dernier message: 27/02/2006, 08h52
  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