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 :

Branchement d'un gestionnaire de mémoire : Erreur de link


Sujet :

C++

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut Branchement d'un gestionnaire de mémoire : Erreur de link
    Bonjour à tous,

    J'essaye de brancher un gestionnaire de mémoire et j'obtiens des erreurs de link en disant que les opérateurs sont déjà définit dans mes ".obj".
    nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in MyLib.lib(MyClass.obj)
    nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in MyLib.lib(MyClass.obj)
    J'ai essayé de rajouter "Nafxcwd.lib Libcmtd.lib" en dernier dans les dépendances supplémentaires ainsi que dans les librairies à ignorer, mais rien à faire, j'ai toujours ces erreurs.

    Que puis-je faire ?

    Merci,

    A bientôt


    Aurélien

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Traduction: Tu n'as pas le droit de redéfinir les opérateurs new et delete dans une application utilisant la bibliothèque MFC: MFC le fait déjà.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Ha mince ok,

    Et comment peut-t-on tracer les fuites de mémoire ?
    Lorsque je quitte mon appli, VS me met "Object memory detected" puis il me donne l'adresse d'un pointeur, la taille du bloc et la valeur en chaîne de caractère.

    Comment puis-je retrouver le "new" ou "malloc" ou "new[]" coupable ?


    Merci,

    A bientôt

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    En rajoutant un #define new DEBUG_NEW dans tes fichiers source (après les includes).
    Généralement, on le met entre directives #ifdef _DEBUG ... #endif
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 60
    Par défaut
    bonjour,

    Si tu veux faire une gestion de mémoire hors debug, mets operator new et delete en inline, dans un en-tête, t'auras pas de pb de link.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /**** memory.hpp ****/
    namespace memory
    {
        void* alloc(size_t);
        void dealloc(void*);
    }
     
    inline void* operator new(size_t size) { return alloc(size); }
    inline void operator delete(void* ptr) { dealloc(ptr); }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /**** memory.cpp ****/
    // ne JAMAIS include memory.h //
     
    namespace memory
    {   // appels de l'implémentation par défaut //
        void* alloc(size_t size) { return operator new(size); /**/}
        void dealloc(void*  ptr) { operator delete(ptr); /**/}
     
        /* rajoute ce que tu veux, ici et aux signes /**/
    }
    et tu peux en profiter pour enregistrer les allocations et déallocations dans une liste et créer une fonction de désallocation générale...

    Pour le debug, fait comme a dit Médinoc, en plus si tu veux tracer les fuites.

    Normalement, tu dois pouvoir gérer les allocations comme ça.

Discussions similaires

  1. Conflit entre mon gestionnaire de mémoire et afxmem
    Par mister3957 dans le forum C++
    Réponses: 9
    Dernier message: 30/06/2008, 12h52
  2. Gestionnaire d'interruptions : erreur de syntaxe avec l'opcode call
    Par Link/DD dans le forum Programmation d'OS
    Réponses: 7
    Dernier message: 23/01/2008, 17h00
  3. Réponses: 10
    Dernier message: 20/08/2007, 10h47
  4. gestionnaire de mémoire en c
    Par kagemusha dans le forum C
    Réponses: 13
    Dernier message: 14/10/2006, 11h06
  5. Réponses: 1
    Dernier message: 27/06/2006, 20h28

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