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

Bibliothèque standard C Discussion :

[free et malloc]


Sujet :

Bibliothèque standard C

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Points : 1 111
    Points
    1 111
    Par défaut [free et malloc]
    Bonjour, je me pose des questions sur le fonctionnement de free. Notamment, est ce que de la memoire allouee dans une fonction devra être libéré à l'extérieur de cette même fonction.

    Par exemple, est ce que le code suivant est correct ?
    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
    27
    28
    29
    30
    31
    32
     
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    char * say_hello(const char * name)
    {
         char * o_string ;
         o_string = malloc(sizeof(*o_string)*(strlen(name)+strlen("hello ")));
         if(o_string!=NULL)
         {
              o_string = strcpy(o_string, "hello ") ;
              o_string = strcat(o_string, name) ;
         }
         else
         {
               puts("probleme memoire") ;
         }
         return o_string ;
    }
     
    int main(void)
    {
         char * sentence ;
         sentence = say_hello("TOTO") ;
         if(sentence!=NULL) {
              puts(sentence) ;
              free(sentence), sentence = NULL ;
         }
         return 0 ;
    }
    Enfin, je dois dire que j'écris un programme qui contient énormément d'allocations memoire, et je voudrai bien savoir comment limiter la casse (eviter les fuites memoires et les appels trop frequents a malloc() et free() ) en adoptant des conventions de codage efficaces.

    Merci beaucoup.

    Cordialement,

    kromartien.

  2. #2
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Citation Envoyé par kromartien
    Par exemple, est ce que le code suivant est correct ?
    Presque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <...>
    o_string = malloc(strlen(name)+strlen("hello ") +1);
    <...>
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par kromartien Voir le message
    Bonjour, je me pose des questions sur le fonctionnement de free. Notamment, est ce que de la memoire allouee dans une fonction devra être libéré à l'extérieur de cette même fonction.
    ça dépend si tu as fini de t'en servir ou non

    Si oui, tu la libères dans la fonction.

    Sinon, cela peut être libéré à l'extérieur, à moins que ce que renvoie la fonction ne soit pas un pointeur, et que le pointeur soit passé en paramètre, auquel cas ce pourrait être aussi un dernier appel à la fonction, ou avec un flag approprié, qui libérerait la mémoire..

    C'est le pointeur qui doit absolument être déclaré à l'extérieur... La libération ça dépend (en général c'est oui).



    Citation Envoyé par kromartien Voir le message
    Enfin, je dois dire que j'écris un programme qui contient énormément d'allocations memoire, et je voudrai bien savoir comment limiter la casse (eviter les fuites memoires et les appels trop frequents a malloc() et free() ) en adoptant des conventions de codage efficaces.
    • Initialiser systématiquement tous les pointeurs à NULL
    • Vérifier systématiquement que les allocations se sont bien passées.
    • Prévoir les cas où ça s'est mal passé et désallouer tout ce qui a été alloué avant (dans la fonction)
    • Prévoir les cas où ça s'est mal passé et désallouer tout ce qui a été alloué avant (dans les appels de fonction)
    • Remettre les pointeurs à NULL dès qu'on a libéré


    Si déjà tu fais ça, tu as 99% de fait..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Points : 1 111
    Points
    1 111
    Par défaut
    Ok, j'ai fait comme ça, ça va mieux.

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

Discussions similaires

  1. plantage de free après malloc
    Par Chewbi dans le forum C
    Réponses: 4
    Dernier message: 25/08/2006, 15h16
  2. Réponses: 3
    Dernier message: 27/02/2006, 08h52
  3. malloc et free
    Par petdelascar dans le forum C
    Réponses: 6
    Dernier message: 15/01/2006, 21h08
  4. free/malloc
    Par Duguesclin dans le forum C
    Réponses: 3
    Dernier message: 09/01/2005, 19h04
  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