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

MFC Discussion :

Assertion Failed à l'éxecution en mode Debug


Sujet :

MFC

  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Par défaut Assertion Failed à l'éxecution en mode Debug
    Bonjour,

    Un phenomene bien loufoque ...
    Quand je compile en mode Debug puis execute l'appli j'ai un debug Assertion Failed dans winocc.cpp ligne 290. Ce qui n'est pas le cas en mode Release.
    Cette assertion provient du fait que le Handle de ma Dialog est egal à 0.

    Dans le fichier winocc.cpp, la ligne en question :
    ASSERT(::IsWindow(m_hWnd));

    Pourquoi en mode Debug et pas en Release ??

    Pour les Détails :
    J'ai une Classe CTranslateDlg dérivée de CDialog.
    Et effectivement, à l'initialisation :
    CTranslateDlg dlg;
    Mon objet dlg est égal à 0.

    Donc, lorsque je fais un dlg.DoModal( ), l'appli se viande lamentablement ...

    Une Idée ??

    Toutes les suggestions sont les bienvenues.

    Fred

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    si l'application se plante sur cette ligne c'est que la fenêtre ou le contrôle en question n'est pas initialisé graphiquement (m_hWnd est null).
    il faut que tu remontes la pile des appels à partir de l'erreur pour tomber sur la partie de ton code qui cause le probléme.

  3. #3
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Par défaut
    Je confirme, j'ai bien essayé mais sans succès.
    Je remonte jusqu'au CCmdTarget.
    Dans l'initialisation de l'objet de type CWnd le handle est effectivement egal à 0. Mais je ne sais pas d'ou vient le problème.
    L'objet de type CObject est bien initialisé.

    Dans la méthode InitInstance de la Classe CTranslateApp qui dérive de CWinApp, je déclare l'objet dlg (CTranslateDlg dlg; ).

    Le constructeur de CTranslateDlg est tout ce qu'il y a de plus classique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CTranslateDlg::CTranslateDlg(CWnd* pParent /*=NULL*/)
    	: CDialog(CTranslateDlg::IDD, pParent)
    {
    	//{{AFX_DATA_INIT(CTranslateDlg)
    	m_szStatus = _T("");
    	m_szLanguage = _T("");
    	//}}AFX_DATA_INIT
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    	m_IsSubmit = TRUE;
    }
    Pour le reste c'est les MFC qui gèrent.
    Vraiment je ne comprends pas, et pourquoi le pb ne survient pas en Release Mode ??

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    bon ,
    tu as zappé un truc, ce code en remontant la pile des appels doit forcement aboutir sur une ligne de ton code .
    exemple pouvant aboutir a ton probleme:
    si j'essaye de faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SetWindowText("coucou");
    dans le constructeur de la fenêtre tu tomberas sur le même probleme que tu évoques...
    si ça fonctionne en release c'est peut etre que la portion de code incriminée est conditionnéz a un test ,une variable non initialisée etc ...
    que ça plante en debug est le plus facile à régler, en release uniquement c'est une autre histoire...

  5. #5
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 13
    Par défaut
    Désolé de déterrer se message mais j'ai le même problème.
    On m'indique la ligne :
    (j'utilise des groupements de contrôles)

    Dans ma fenêtre principale j'appel, grâce à un bouton, une autre fenêtre (celle qui contient les groupes)
    Mais avant d'appuyer sur se fameux bouton, je demande à l'utilisateur combien de groupe il veut.

    Je pense que c'est se dont parle Farscape, mais malgré sa je ne sais pas comment résoudre se problème.
    J'utilise des variables globales pour appeler les groupes.

    Quelqu'un pourrait il m'aider ?

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 lors de l'éxécution
    Par Keweed dans le forum Ogre
    Réponses: 8
    Dernier message: 14/06/2008, 15h27
  3. debug assertion failed: dbgheap.c
    Par lolo le belge dans le forum Visual C++
    Réponses: 5
    Dernier message: 17/05/2007, 22h04
  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