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 :

allocation et desallocation de memoire


Sujet :

C

  1. #1
    Membre éclairé
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Par défaut allocation et desallocation de memoire
    Bonjour,

    Voilà, j'ai un léger soucis:

    J'ai une fonction qui prend en argument un int**:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int func(int ** value)
    {
       int * temp;
     
      f =  malloc(20*sizeof(int));
     
      [...]
     
      *value = f;
     
      return(0);
    }
    Donc dans mon main j'appelle cette fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void main()
    {
      int * value;
     
      func(&value);
     
      [...]
     
     
      //ET LA JE NE SAIS PAS COMMENT DESALOUER LA MEMOIRE POUR VALUE.
    }
    Comment puis-je désallouer cette mémoire???

    Merci.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Par défaut
    Je comprends pas vraiment ce que tu cherches a faire avec cette fonction, qu'importe voila ce que tu demandes:
    Citation Envoyé par man 3 malloc
    free() libère l'espace mémoire pointé par ptr, qui a été
    obtenu lors d'un appel antérieur à malloc(), calloc() ou
    realloc(). Si le pointeur ptr n'a pas été obtenu par l'un
    de ces appels, ou si il a déjà été libéré avec free(), le
    comportement est indéterminé. Si ptr est NULL, aucune
    tentative de libération n'a lieu.
    A bientot.

  3. #3
    Membre éclairé
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Par défaut non pas free
    Le problème, c'est justement que le free crée une erreur car comme ce n'est pas le main qui a fait le malloc mais func(), il n'arrive pas à faire le free.

    Et c'est pour cela que je ne sais pas comment résoudre ceci. D'autant plus que je ne peux pas faire l'allocation dans le main, elle est nécessairement dans func().

    Faut il donner des arguments spéciaux à free pour que cela fonctionne?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 16
    Par défaut
    Il te suffit de faire un :
    allez @++.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Par défaut Re: non pas free
    Citation Envoyé par barthelv
    Le problème, c'est justement que le free crée une erreur car comme ce n'est pas le main qui a fait le malloc mais func(), il n'arrive pas à faire le free.
    Je suis étonné de ce que tu dis car j'ai fait un test et celui a parfaitement fonctionné autant a la compilation qu'au niveau de l'execution.

    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
     
    #include <stdlib.h>
     
    int func(int ** value) 
    { 
      int* f = (int*) malloc(20*sizeof(int)); 
      *value = f; 
      return 0; 
    }
     
     
    void main() 
    { 
      int * value; 
      func(&value); 
      free(value);
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    E:\home\test>gcc test.C
     
    E:\home\test>a.exe
     
    E:\home\test>
    Compilation et Execution effectuées avec succes avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    E:\home\test>gcc -v
    Reading specs from d:\gcc\bin\..\lib\gcc-lib\i386-mingw32\2.95.2\specs
    gcc version 2.95.2 19991024 (release)
    A bientot

  6. #6
    Membre éclairé
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Par défaut Résolu
    Bon j'ai compris mon problème. En fait je ne faisais pas un malloc mais j'utilisais ma propre fonction d'allocation. Je dois donc utiliser ma propre fonction de désallocation et non pas un free.

    Désollé pour le dérangement.

  7. #7
    Membre éprouvé

    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 205
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 205
    Par défaut
    as tu essayé au moins avec le free et malloc que ton compilo te fournit ???

    j'ai a peu pres le meme souci que toi

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: allocation et desallocation de memoire
    Citation Envoyé par barthelv
    J'ai une fonction qui prend en argument un int**:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int func(int ** value)
    {
       int * temp;
     
      f =  malloc(20*sizeof(int));
     
      *value = f;
     
      return(0);
    }
    Donc dans mon main j'appelle cette fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void main()
    {
      int * value;
     
      func(&value);
     
    }
    Comment puis-je désallouer cette mémoire???
    Ton utilisation de malloc() me semble un peu négligente...

    http://emmanuel-delahaye.developpez....tes.htm#malloc

    Sinon, pour répondre à ta question, qu'est-ce qui ne va pas avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    free(value);
     
    /* Conseille' : aide au debug. */
    value = NULL;
    Et pour finir : main() retourne int.

    http://emmanuel-delahaye.developpez....s.htm#typemain

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/07/2008, 16h46
  2. Allocation de (beaucoup) de memoire
    Par buzzkaido dans le forum C++
    Réponses: 30
    Dernier message: 01/07/2008, 08h46
  3. Allocation dynamique de la memoire ?
    Par gotrunkssj dans le forum Bibliothèque standard
    Réponses: 6
    Dernier message: 22/01/2008, 21h04
  4. Réponses: 13
    Dernier message: 05/01/2004, 19h00
  5. Allocation memoire Limité avec TurboC
    Par sebastien51 dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 15/10/2003, 23h32

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