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 :

Microsoft Visual Studio Bug bizarre


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 21
    Par défaut Microsoft Visual Studio Bug bizarre
    Bonjour,

    Je veux créer un exécutable (.exe) de mon programme en C++.
    J'utilise Microsoft Visual Studio (MSV) 2005 (je sais c'est pas super).

    Quand je le lance directement, il fonctionne normalement et il n'y a aucune fuite mémoire d'après Visual Leak Detector (VLD), logiciel permettant de détecter les fuites mémoire .
    Par contre, quand je fais du pas à pas (en mode debug), il y a un bogue bizarre et MSV lance un message d'alerte.

    En fait, ce message se passe à la fin (avant-dernière ligne) de mon programme lorsque j'efface ma session (delete d'un pointeur créé).
    La dernière ligne étant un simple return 0 !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int main()
    {
    Object* session = NULL;
    session = createSession();
    // deroulement de mon programme
    delete session;
    return 0;
    }
    Voici le message d'alerte :

    Microsoft Visual Studio
    ----------------------------------------------------------------
    Windows a déclenché un point d'arrêt dans coquilleExe.exe.

    Cela peut être dû à une défaillance du tas et indique un bogue dans coquilleExe.exe ou l'une des DLL chargées.

    La fenêtre Sortie peut contenir des informations de diagnostic supplémentaires


    Mes questions sont :
    Faut'il que je me fie à l'éxecution de mon programme pas à pas (en mode débug) ou non ?
    Est ce une erreur de MSV qui agit bizarrement parfois ?

    Merci d'avance.

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Ton code fait un delete d'un pointeur non-initialisé. C'est un comportement indéfini, il se peut que ça passe en release par hasard mais le bug n'en demeure pas moins.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 21
    Par défaut
    Pardon, il était bien initialisé et créé dans mon programme...

    Si quelqu'un a une idée

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 474
    Par défaut
    Citation Envoyé par bobo034 Voir le message
    Pardon, il était bien initialisé et créé dans mon programme... Si quelqu'un a une idée
    Ton pointeur est initialisé à NULL et défini par la fonction createSession().

    - As-tu vérifié que createSession() n'échouait pas en renvoyant un pointeur NULL ?
    - As-tu vérifié que tu ne libérais pas la mémoire ailleurs dans « // déroulement du programme » ?
    - As-tu vérifié que le contenu de « session » n'était pas modifié ailleurs ?

    Mais surtout, si ça fonctionne en release et pas debug, c'est un bug intermittent, et cela peut être dû à une corruption de mémoire.

    Vérifie si tu n'as pas une boucle ou quelque chose dans le genre qui irait remplir un tableau au delà de ses limites, et écraser ton pointeur dans la foulée.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 21
    Par défaut
    Oui j'ai vérifié createSession() renvoit bien un pointeur non NULL.

    Non je ne libère pas la mémoire ailleurs et il n'y a pas de tableau allant au delà des limites ou modifiant la « session ».

    Ensuite, le contenu de « session » est modifié dans la suite du programme mais sans le détruire ou le réallouer.

    Enfin, tout ceci fonctionne en mode release et debug...
    Mon problème est quand je veux faire du pas à pas en mode debug

  6. #6
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    As-tu vérifié que createSession() n'échouait pas en renvoyant un pointeur NULL ?
    Lorsque l'on travaille avec des pointeurs, il faut prendre l'habitude de toujours vérifier leur validité avant d'agir dessus.
    Si ton programme pose problème lors du delete, même par intermittence, c'est que ton pointeur n'est pas valide par intermittence, tout simplement.

  7. #7
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Windows a déclenché un point d'arrêt dans coquilleExe.exe.

    Dans ce cas, d'abord recompile tout et réessaye.


    Si ça fais toujours la même erreur, alors c'est le reste du code qui provoque un point d'arret. Ca peut être indirect, déclenché par windows, mais j'en doute.

Discussions similaires

  1. programmer en c sous microsoft visual studio 2005
    Par chrysmac2003 dans le forum Visual C++
    Réponses: 11
    Dernier message: 02/10/2006, 18h01
  2. [Visual Studio]Plantage bizarre
    Par zooffy dans le forum ASP
    Réponses: 5
    Dernier message: 19/07/2006, 18h03
  3. Presentation de Microsoft Visual Studio.Net
    Par saredo dans le forum MFC
    Réponses: 4
    Dernier message: 26/06/2006, 09h03
  4. Microsoft Visual Studio C++
    Par benjiprog dans le forum MFC
    Réponses: 3
    Dernier message: 15/02/2006, 11h35
  5. Microsoft Visual Studio 6.0 ????
    Par zalett dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 08/12/2005, 17h17

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