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

Langage C++ Discussion :

Conversion malloc et free en C++


Sujet :

Langage C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Par défaut Conversion malloc et free en C++
    Bonjour à tous.

    Je continue de puiser mon inspiration dans un programme écrit en C (très exactement en Objective C). J'ai donc besoin de le transcrire en C++ et j'aurais besoin de votre avis sur les fonctions malloc et free.

    Voici le code de référence :
    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
    TBQuadTreeNode* TBQuadTreeNodeMake(TBBoundingBox boundary, int bucketCapacity)
    {
        TBQuadTreeNode* node = malloc(sizeof(TBQuadTreeNode));
        node->northWest = NULL;
        node->northEast = NULL;
        node->southWest = NULL;
        node->southEast = NULL;
     
        node->boundary = boundary;
        node->bucketCapacity = bucketCapacity;
        node->count = 0;
        node->points = malloc(sizeof(TBQuadTreeNodeData) * bucketCapacity);
     
        return node;
    } 
     
    void TBFreeQuadTreeNode(TBQuadTreeNode* node)
    {
        if (node->northWest != NULL) TBFreeQuadTreeNode(node->northWest);
        if (node->northEast != NULL) TBFreeQuadTreeNode(node->northEast);
        if (node->southWest != NULL) TBFreeQuadTreeNode(node->southWest);
        if (node->southEast != NULL) TBFreeQuadTreeNode(node->southEast);
     
        for (int i=0; i < node->count; i++) {
            free(node->points[i].data);
        }
        free(node->points);
        free(node);
    }
    Pour le 1° malloc, j'aurais pensé le traduire par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TBQuadTreeNode* node = new TBQuadTreeNode;
    Pour le second, j'ai beaucoup plus de difficulté. Je pencherai plus pour un vector, dans ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        node->points = vector<int> tableau (sizeof(TBQuadTreeNodeData) * bucketCapacity);

    Quant au free, j'ai voulu essayer avec un delete, sans succès, notamment dans la boucle for.

    Quel est votre avis sur cette question, sachant que j'ai peut-être tout faux en voulant adapter du code C en C++ ?

    Merci par avance.

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    malloc() et free() sont disponibles en C++. Si ton code marche, garde le tel quel. Tu gagneras du temps et éviteras des problèmes.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Par défaut
    ... je l'ai testé sous éclipse et il me faisait des erreurs pour ces deux fonctions, d'où ma recherche. Et effectivement, sous QT il passe sans problème.

    Merci pour cette aide (formidable !) qui consiste à dire de ne rien faire pour que ça fonctionne.

    J'en voudrai plus souvent des réponses comme ça.


  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Salut,

    effectivement le second gagnerait à être un vector.
    Une fois que ce membre est un vector, la première allocation devient inutile et tu peux retourner l'objet par simple copie (qui sera optimisée et supprimée une très large majeure partie du temps).
    northWest, northEast, southWest, southEast seraient eux des unique_ptr.

    Cela dit vu le free sur TBQuadTreeNodeData, tu devrais commencer par changer celui-ci pour utiliser vector ou unique_ptr en interne.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Par défaut
    Merci Bousk.

    Après avoir fait tourner l'ensemble, je l'optimiserai en ce sens.

+ 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