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 :

[debutant]Problème d'alocation dynamique.


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut [debutant]Problème d'alocation dynamique.
    Bonjour.

    Suite à la lecture d'un tutoriel j'ai voulu essayer le code d'entraînement l'allocation dynamique suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    long* memoireAllouee = NULL;
     
        memoireAllouee = malloc(sizeof(long));
    malheureusement, il refuse le long* et n'accepte qu'un void* pour memoireAllouee avec le message d'erreur suivant (compilation):
    d:\dossiers & prog\programation\c\c++\init\tutodynaloc\tutodynaloc\main.cpp(15) : error C2440: '=' : impossible de convertir de 'void *' en 'int *'
    La conversion de 'void*' en pointeur vers non 'void' nécessite un cast explicite
    j'ai trouvé qu'il fallait mettre un (int*) devant le malloc pour résoudre le problème... je me demandais si c'était normal, si c'était du à une option ou au compilateur, et quel avantage, dans ces derniers cas apportaient le cast dynamique ....

    merci.

  2. #2
    Membre expérimenté Avatar de Twindruff
    Inscrit en
    Janvier 2005
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 216
    Par défaut
    En C++ on utilise new plutôt. malloc c'est du C.

  3. #3
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    En fait oui, en C++, il y a new. Avec new, il y a appel au constructeur tandis qu'avec malloc il n'y a pas d'appel au constructeur (donc tes objets ne sont pas initilisés), pour des raisons de performances, on peut vouloir passer par malloc mais mieux vaut utiliser new.

    Pour ton problème de retour de malloc, il y a une différence entre le malloc du C++ et celui du C. En C, tu n'as pas besoin de caster le retour tandis qu'en C++ tu es obligé.

  4. #4
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    Merci beaucoup, mais que fait le new exactement ?

    je n'ai pas tres bien compris désolé

    encore merci.

  5. #5
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Citation Envoyé par méphistopheles
    Merci beaucoup, mais que fait le new exactement ?
    Citation Envoyé par PRomu@ld
    Avec new, il y a appel au constructeur tandis qu'avec malloc il n'y a pas d'appel au constructeur

  6. #6
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    Je m'excuse de mon imprécision, je veut dire dans le code posté par Twindruff:sinon, je dois avouer que je ne sait pas ce qu'est qu'un appel au constructeur...

    Merci

  7. #7
    Membre éclairé

    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Par défaut
    Citation Envoyé par PRomu@ld
    Pour ton problème de retour de malloc, il y a une différence entre le malloc du C++ et celui du C. En C, tu n'as pas besoin de caster le retour tandis qu'en C++ tu es obligé.
    C'est n'est pas une histoire de malloc, mais bien plus généralement une histoire de cast. Il n'y a pas de cast implicite Void* -> T* en C++ comme il y a en C.

    J'imagine que vous le savez, mais pas les débutants qui pouraient comprendre de travers.

  8. #8
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    à vrai dire, j'avais aussi regardé les tutoriels de DVP,... mais ceux de C !
    en effet, j'étais, surement comme beaucoup d'autre incultes, convaincu qu'il fallait conaitre le C avant de pouvoir utiliser le C++.

    en plus, le tutoriel que j'utilise est bien intitulé "tutoriel C/C++"... c'est trompeur...

    bon, ben je crois que je vais m'y mettre alors...

    merci

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    Citation Envoyé par méphistopheles
    en effet, j'étais, surement comme beaucoup d'autre incultes, convaincu qu'il fallait conaitre le C avant de pouvoir utiliser le C++.
    Une fois que tu as compris que ce sont deux langages différents et ce qui diffère entre les deux, c'est bon.

Discussions similaires

  1. [debutant]Problèmes
    Par BibiGmi dans le forum OpenGL
    Réponses: 2
    Dernier message: 05/03/2004, 14h00
  2. problèmes de textes dynamique dynamiquement générés
    Par stephane eyskens dans le forum Flash
    Réponses: 18
    Dernier message: 05/09/2003, 13h13
  3. Réponses: 23
    Dernier message: 21/08/2003, 07h16
  4. [Debutant] Problème du linker [Dev-c++4]
    Par Macdir dans le forum Dev-C++
    Réponses: 3
    Dernier message: 30/05/2003, 20h50
  5. [Rave Report] problème de création dynamique
    Par Nivux dans le forum Rave
    Réponses: 2
    Dernier message: 24/05/2003, 00h07

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