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

Visual C++ Discussion :

debug assertion failed sur un delete venant d'une DLL


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut debug assertion failed sur un delete venant d'une DLL
    Bonjour,

    J'ai un problème qui apparait, et là c'est le comble, qu'en mode Debug... lol

    En fait, j'utilise des DLL et je crée des objets à partir de classes qui sont dans ces DLL...

    Et apparemment, c'est le delete de ces objets qu'il n'aime pas...

    J'ai mis exactement ce code, ou le delete suit le new... donc impossible que le pointeur ait été changé, et le pointeur n'est effectivement pas NULL !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Header* h = new Header();
    delete h; // C'est la que ca plante
    J'obtiens l'erreur : Debug Assertion Failed!
    File: dbgheap.c
    Line: 1044
    ...

    J'avais trouvé ce post qui en parlait :
    http://www.developpez.net/forums/d89...ile-dbgheap-c/
    ou quelqu'un disait qu'avec les DLL, si on a des free, delete, il faut voir le runtime library qu'on utilise si on a ce problème... mais j'ai un peu tout essayé comme config dans les settings... et ca n'a rien changé...

    Quelqu'un a une idée ?

    Merci
    ++

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 503
    Par défaut
    Primo : c'est une très mauvaise idée d'avoir la possibilité d'instancier les objets d'une classe implémentée dans une DLL, justement pour des problèmes de compatibilité de runtimeC.

    Secondo : Comme ont ne connait pas la version de la C-Runtime ou du compilateur ou du SDK que vous utiliez, le numéro de ligne, ça nous fait une belle jambe. Donnez nous le source de la ligne si nécéssaire.

    Tercio : Comme c'est un assert, la cause de l'erreur devrait être évidente car elle correspond au non respect d'une contrainte que la MACRO ASSERT est chargé de vérifier (en Debug). Comme on n'a pas la ligne de code, c.f. Secondo, et bien on ne peut pas vous aider.

    En résumé, avant de chercher une solution, analysez le problème.

    P.S.: et donnez nous cette putain d'assertion (le code) qui est fausse.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par défaut
    Ce qui est créé par une DLL doit être détruit par la même DLL.
    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.

  4. #4
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut
    non mais ce n'est pas créer par la DLL...

    En fait, j'ai mes .h de ce qu'il y a dans la DLL, et je lie donc mon programme avec cette DLL pour que lors de l'execution, il aille chercher le code dedans.

    Mais en fait, c'est dans mon programme, que je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Header* h = new Header();
    delete h; // C'est la que ca plante
    Et c'est la ligne du delete qui stoppe le programme, encore une fois, que en mode DEBUG...

    Je ne vois pas quel autre code source je peux donner ?


    Parce que en fait, moi ce que je voulais faire, c'est vraiment définir des classes que je mets dans des DLL et après dans mes programmes, pouvoir créer mes objets de ces types la... donc apparemment il ne faudrait pas le faire ?
    Ou alors passer par 2 fonctions de la DLL qui créer un objet et le supprime ? Au lieu de passer par un new et delete direct... ?

    Merci
    Bonne journée

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par défaut
    Citation Envoyé par italiasky Voir le message
    Ou alors passer par 2 fonctions de la DLL qui créer un objet et le supprime ? Au lieu de passer par un new et delete direct... ?
    Quand on joue avec des classes C++ dans des DLL, c'est toujours la méthode que je conseille.
    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.

  6. #6
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut
    Oui donc c'est bien ce que je pensais, à proscrire les new et delete direct...

    Mais pourquoi en mode release ca ne plante pas ? Si il y a vraiment un problème ?

    Le problème, c'est que les DLL que j'utilise sont utilisées par pas mal d'autres logiciels dont je ne connais même pas l'existence... lol et donc si je modifie le code de ces DLL pour ajouter des fonction intermédiaires pour créer et détruire les objets, ca va poser problème, parce que le jour ou on me mets les .dll d'avant, ca va planter... ces nouvelles méthodes n'existeront pas...

    Vu que le problème n'intervient qu'en mode DEBUG, n'est-il pas possible de le contourner juste pour le debug ? Une option ? Vu qu'à priori ce n'est pas un réel problème en soi, enfin pas un problème de fuite de mémoire non ? Sinon mon programme cracherait en mode release... ?

    Merci de votre aide, je suis un peu coincé la du coup...

Discussions similaires

  1. Debug Assertion Failed ! File: dbgheap.c
    Par jacques_henry dans le forum MFC
    Réponses: 9
    Dernier message: 15/04/2015, 11h29
  2. Debug Assertion Failed sur set_intersection
    Par Zéli dans le forum SL & STL
    Réponses: 8
    Dernier message: 04/12/2009, 04h32
  3. Réponses: 2
    Dernier message: 29/07/2009, 12h34
  4. debug assertion failed...
    Par BnY dans le forum MFC
    Réponses: 2
    Dernier message: 18/04/2006, 16h49
  5. Réponses: 3
    Dernier message: 07/12/2004, 22h09

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