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 :

CTreeCtrl problème de destruction


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2008
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 522
    Par défaut CTreeCtrl problème de destruction
    Bonjour,

    J'utilise VS2010. J'ai eu un problème avec les CTreeCtrl:
    Lors de la destruction de la fenêtre ça plante. Et je cherche à savoir pourquoi:
    Le code où ça bloque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void __cdecl _free_base (void * pBlock)
    {
    int retval = 0;
     
    if (pBlock == NULL)
    return;
    RTCCALLBACK(_RTC_Free_hook, (pBlock, 0));
    retval = HeapFree(_crtheap, 0, pBlock);
    if (retval == 0)
    {
    errno = _get_errno_from_oserr(GetLastError());
    }
    }
    Donc, comme ça ne vient que de plus haut dans mon code...
    Je suis sûr que ça vient du CTreeControl : si je ne le remplis pas, ça ne bug pas.

    Donc voila comment ça fonctionne.
    J'ai un objet database dans lequel je stocke les HTREEITEM générés à chaque ajout, cet objet est detruit avant la fenêtre(j'ai essaié d'enlever tout les items du Tree un à un avant la fermeture de la fenêtre, ça ne change rien.

    C'est un peu près tout ce que je peux vous dire.
    Je trouve cela un peu bizzare (j'avais essaié la nouveelle classe CMFCTreeControl et un simple DeleteAllItem() générait l'erreur)

    Si quelqu'un connaissait l'origine du problème, merci de m'en faire part. (Parce que le bug à la fermeture du programme, ça fait bazzare).

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 488
    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 488
    Par défaut
    Erreur à quelle ligne ?
    Quel type d'erreur : plantage, freeze, messagebox ?
    Quel est le code d'erreur ?
    La valeur des différentes variables ?

    La base du debugging quoi.

  3. #3
    Membre éclairé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2008
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 522
    Par défaut
    Le type d'erreur (sans debug): gestion par Windows. Aucun plantage visible.
    Je tiens quand même à préciser que ce n'est pas mon code ici (je n'ai pas été clair, pardon), mais le code de VS.

    Le code erreur:
    Exception non gérée à 0x000000013f74d894 dans DbNet.exe : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0xffffffffffffffff.
    Le code debug, ca plante ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #if _ITERATOR_DEBUG_LEVEL == 2
    if (_Myproxy != 0)
    { // proxy allocated, drain it
    _Lockit _Lock(_LOCK_DEBUG);
    for (_Iterator_base12 **_Pnext = &_Myproxy->_Myfirstiter;
    *_Pnext != 0; *_Pnext = (*_Pnext)->_Mynextiter)
    (*_Pnext)->_Myproxy = 0;
    _Myproxy->_Myfirstiter = 0;
    }
    #endif /* _ITERATOR_DEBUG_LEVEL == 2 */
    }
    Les variables:
    - _Pnext 0xfeeefeeefeeefef6 std::_Iterator_base12 * *
    CXX0017: Erreur : symbole "" introuvable
    - _Lock {_Locktype=3 } std::_Lockit
    _Locktype 3 int
    - this 0x000000000034df58 {_Myproxy=0xfeeefeeefeeefeee } std::_Container_base12 * const
    - _Myproxy 0xfeeefeeefeeefeee {_Mycont=??? _Myfirstiter=??? } std::_Container_proxy *
    _Mycont CXX0030: Erreur : impossible d'évaluer l'expression
    _Myfirstiter CXX0030: Erreur : impossible d'évaluer l'expression
    Voila, moi je ne suis pas mieux renseigné

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par raphchar Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    - this 0x000000000034df58 {_Myproxy=0xfeeefeeefeeefeee } std::_Container_base12 * const
    - _Myproxy 0xfeeefeeefeeefeee {_Mycont=??? _Myfirstiter=??? } std::_Container_proxy *

    0xfeeefeeefeeefeee : un pointeur pas encore alloué ou déjà libéré ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre éclairé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2008
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 522
    Par défaut
    Aucune idée, les informations sont faibles, j'ai mis toutes les variables que "l'espion" m'indiquait, sur les pointeur il y a des inconnues comme vous le constatez (même en mode debug!!!).

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 488
    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 488
    Par défaut
    Le code que vous nous montrez n’à rien avoir avec VS. Vous aurez le même code avec n'importe quel compilateur qui utilise la même STL.

    C'est le code de la STL, pas de VS. VS n'est qu'un EDI, rien d'autre. Ce n'est pas un environnement d'exécution ou un interpréteur. OK?

    Si mes souvenirs sont bons, "0xfeeefeeefeeefeee" est utilisé par la C-Runtime en Débug lors de la libération de la mémoire.

    Donc _Myproxy point sur une zone qui a été libéré via la "fonction delete" ou la fonction "free".

    Donc, l'explication la plus probable est que vous supprimez, via delete ou free, 2 fois le même bloc de mémoire.

    Et dans sa grande mansuétude, la C-Runtime Debug vous fait planté avant de continuer vos bêtises en mémoire.

    Je pense que vous utilisez la STL de travers. Vérifiez dans VOTRE CODE, votre erreur.

    Vous pouvez poster un code minimal qui reproduit le problème et on vous dira ou vous utilisez la STL de travers.

    Lors de votre plantage, vous déréférencez une variable qui est égale à -1. C’est laquelle ? C’est quelle ligne précisément qui plante.

Discussions similaires

  1. Problème de destruction dynamique d'Applet
    Par EvAyla dans le forum Applets
    Réponses: 1
    Dernier message: 13/06/2007, 21h48
  2. Réponses: 5
    Dernier message: 27/03/2007, 09h51
  3. Problème de destruction de session
    Par nmathon dans le forum Langage
    Réponses: 3
    Dernier message: 15/08/2006, 16h42
  4. problème de destruction de composants dynamique
    Par gandf dans le forum C++Builder
    Réponses: 4
    Dernier message: 23/08/2005, 10h39
  5. Problème de destruction
    Par loupdeau dans le forum MFC
    Réponses: 4
    Dernier message: 17/03/2005, 10h37

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