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 :

Problème de choix d'allocation new/malloc


Sujet :

Langage C++

  1. #1
    Membre actif
    Inscrit en
    Septembre 2010
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 73
    Par défaut Problème de choix d'allocation new/malloc
    Bonjour,

    J'ai rencontré un petit problème lors d'une conception de container d'objet de taille variable, en cpp.

    Lorsque l'on fait un container basique (list, array...) les noeuds sont les même pour tous les éléments et sachant que le langage utilisé est le cpp, il est normal d'utiliser T * t = new T() pour allouer un nouvel élément.

    Le souci de mon container c'est qu'il instancie des objets de taille variable, et la seule manière trouvée pour allouer un nouvel élément est d'utiliser :
    (T*)malloc( sizeof(T) + (mySize) * sizeof(T**) )

    Le nombre de l'expression soulignée varie en fonction de la variable mySize.
    Mon problème c'est que je voulais utiliser l'opérateur new utilisé en cpp à la place d'un malloc utilisé en C mais il ne semble pas pouvoir instancier des objets de taille variable.

    Désolé si mon problème parait obscure et/ou bête, mais ayant vu de nombreuse fois qu'il ne faut pas mélanger C et cpp ça me perturbe de ne pas avoir trouvé d'alternative au malloc.

    Merci à ceux qui pourraient m'indiquer s'il y a effectivement une alternative ou pas.

  2. #2
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    je comprend spas bien. Ton conteneur est hétérogéne ou bien ? comment se fais-ce que tes objets soit de taille differente ?

  3. #3
    Membre actif
    Inscrit en
    Septembre 2010
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 73
    Par défaut
    Excellente question. Du coup je crois que j'ai trouvé d'où viens mon erreur (mauvais constructeur)

    Et concernant la nature du container il s'agit d'une skiplist : documentation.pdf

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 633
    Par défaut
    Salut,

    Pour avoir lu le pdf en diagonale (très sommaire), je me dis que tu as, sans doute, très mal compris le principe de base

    Je m'explique: dans le cadre d'un arbre binaire "classique", chaque noeud est composé:
    1. de la donnée réelle
    2. d'une référence (en fait, un pointeur) vers la donnée "plus petite"
    3. d'une référence (en fait, un pointeur) vers la donnée "plus grande"

    Dans le cas d'une skiplist, il "suffit" de pouvoir placer un nombre plus important (et a priori inconnu) de de références vers des données "plus grandes".

    Qu'à cela ne tienne... C++ te donne tout ce qu'il faut pour y arriver, et, principalement, les différents conteneurs "classiques": std::vector et autres

    Tu pourrais donc parfaitement envisager de créer une structure proche de
    // peut etre templatisée pour s'accorder aux différents types à gérer ;-)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct Node
    {
        int value;
        std::vector<Node*> next;
    };
    Il faudra, effectivement, gérer "manuellement" l'allocation et la libération de la mémoire, ainsi que les algorithmes d'ajout/insertion, de suppression et de recherche, mais l'article te fournit les algorithmes nécessaires
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Problème allocation mémoire - malloc () 1Gb
    Par Gellius31 dans le forum Bibliothèque standard
    Réponses: 14
    Dernier message: 21/12/2007, 12h16
  2. Problème de choix
    Par Karim1971 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 12/05/2006, 23h47
  3. Problème de choix de page lors de l'impression
    Par Olaf MENJI dans le forum Windows
    Réponses: 2
    Dernier message: 22/11/2005, 10h51
  4. Pb d'allocation mémoire malloc
    Par oz80 dans le forum C++
    Réponses: 5
    Dernier message: 18/11/2005, 17h23
  5. Problème de choix pour un graphique
    Par MeDioN dans le forum 2D
    Réponses: 2
    Dernier message: 10/10/2005, 10h11

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