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/Free : Style élégant?


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 3
    Par défaut Malloc/Free : Style élégant?
    Bonjour,

    Je suis à la recherche d'une façon élégante de coder plusieurs malloc successifs tout en vérifiant leurs valeurs de retour. Auquel cas, tous les blocs mémoires précédemment alloués seraient libérés.

    Mon problème vient du fait que je déclare notamment plusieurs tableaux (souvent à deux dimensions) au sein d'une fonction qui m'initialise un objet. Je me retrouve donc rapidement avec toute une série de free, souvent redondants, dans le cas où un des mallocs a échoué.

    Qqn aurait ainsi t-il une idée pour éviter tout ce surplus de code?

    Merci

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Boucle, macros, fonctions, etc... tellements de choix ! Faut voir d'après le contexte, ton code existant, ce que tu alloues, etc...
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 3
    Par défaut
    Merci, mais ça ne m'aide pas davantage.

    En ce qui concerne mes allocations, je créé successivement :

    - Un tableau unidimensionnel
    - Deux tableaux bidimensionnels
    - Un flux de données

    C'est particulièrement redondant au niveau de mes tableaux à deux dimensions, où je fais un premier malloc pour le tableaux de pointeurs, puis une boucle pour créer les sous-tableaux. Le tout en vérifiant que les mallocs réussissent, si ce n'est pas le cas, libérer toutes les données précédentes..

    Edit : Bref, au fur et à mesure que j'alloue divers blocs mémoires, le nombre de free est de plus en plus important en cas d'échec... Ce qui est tout à fait normal, mais assez lourd niveau lisibilité.

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Gilles.L
    Merci, mais ça ne m'aide pas davantage.

    En ce qui concerne mes allocations, je créé successivement :

    - Un tableau unidimensionnel
    - Deux tableaux bidimensionnels
    - Un flux de données

    C'est particulièrement redondant au niveau de mes tableaux à deux dimensions, où je fais un premier malloc pour le tableaux de pointeurs, puis une boucle pour créer les sous-tableaux. Le tout en vérifiant que les mallocs réussissent, si ce n'est pas le cas, libérer toutes les données précédentes..

    Edit : Bref, au fur et à mesure que j'alloue divers blocs mémoires, le nombre de free est de plus en plus important en cas d'échec... Ce qui est tout à fait normal, mais assez lourd niveau lisibilité.
    Bin à part faire les allocations pour par exemple tes tableaux de tableaux dans une fonction spécialisé qui reprend le même principe que tu viens de décrire je ne vois pas comment faire autrement.

    T'est obligé de passer par ces étapes de toutes manières !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,

    Citation Envoyé par Gilles.L
    Je suis à la recherche d'une façon élégante de coder plusieurs malloc successifs tout en vérifiant leurs valeurs de retour. Auquel cas, tous les blocs mémoires précédemment alloués seraient libérés.
    En codant un p'tit gestionnaire de mémoire basé sur malloc/free. Lorsqu'une allocation échoue, tu quitte le programme (plus besoin de tester la réussite de l'allocation dans le programme principal) et tu sauvegarde toutes les adresses des zones allouées (dans une listes chaînées), comme ça en cas de problème, suffit de parcourir la liste et de tous libérer.

  6. #6
    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
    Citation Envoyé par Gilles.L
    Je suis à la recherche d'une façon élégante de coder plusieurs malloc successifs tout en vérifiant leurs valeurs de retour. Auquel cas, tous les blocs mémoires précédemment alloués seraient libérés.
    ADT (constructeurs/destructeurs)

    Théorie : http://emmanuel-delahaye.developpez.com/tad.htm
    Réalité : http://emmanuel-delahaye.developpez.com/clib.htm

Discussions similaires

  1. probleme malloc /free
    Par bobyboby dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 02/10/2008, 17h25
  2. [Malloc - Free] Comment bien les utiliser dans ce cas ?
    Par DOC doc doc dans le forum Débuter
    Réponses: 6
    Dernier message: 06/08/2007, 14h39
  3. Probleme d'allocation malloc free
    Par cmoibal dans le forum Linux
    Réponses: 1
    Dernier message: 23/05/2007, 14h21
  4. malloc, free et les fuites
    Par Syrmonsieur dans le forum C
    Réponses: 10
    Dernier message: 28/06/2006, 13h01
  5. Réponses: 3
    Dernier message: 27/02/2006, 08h52

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