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 :

Probleme avec les conteneurs sur visual c++ 2005 express


Sujet :

Visual C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Par défaut Probleme avec les conteneurs sur visual c++ 2005 express
    Bonjour à tous!
    Comme l'indique le message, depuis hier, j'ai un probleme avec les conteneurs (vector, list): dans mon projet j'en utilise quelques uns, la génération se déroule sans aucun problème, mais, lorsque je lance le débogage, le programme s'arrète là dans le fichier vector: _SCL_SECURE_VALIDATE_RANGE(_Pos < size());

    return (*(_Myfirst + _Pos));
    }
    avec ce message : "Exception non gérée à 0x006bcb3e dans TerrainDemo3.exe*: 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x0fd51001."
    J'ai mis des points d'arrêt sur les lignes de déclaration de mes "vector" et me suis rendu compte que le programme s'arrétait avant d'y arriver; d'où mon incompréhension: si le programme n'a même pas encore reçu les conteneurs demandés pourquoi s'arrète-t-il?
    En vous remerciant pour votre aide, je vous souhaite de joyeuses fêtes.

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    L'erreur vient du fait que tu essaies d'accéder à un élément à l'extérieur de ton tableau.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Par défaut
    Je viens de revoir mon code à la lumière de ce que vous venez de dire mais je ne trouve pas mon erreur. Lorsque l'on ajoute un élément dans un vector avec push_back peut-on tomber dans le travers dont vous avez parlé ?

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Non, mais débuggue pour savoir exactement quand ça arrive et regarde la taille et l'élément accédé.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Par défaut
    Merci pour l'aide, j'ai identifié le bout de code à l'origine de l'interruption, c'est celui-ci:
    DWORD* adj = new DWORD[g.Wmesh->GetNumFaces()*3];
    HR(g.Wmesh->GenerateAdjacency(EPSILON, adj));
    (la deuxième ligne).Mais, le problème reste pour moi toujours aussi sibyllin étant donné que "GenerateAdjacency" est une fonction livrée avec le sdk, que je ne peux accéder au corps de la fonction, que j'utilise (au nom des variables près) le même bout de code, sans qu'il ne bug, ailleurs dans le projet, et que j'utilise la fonction correctement (d'après la documentation).
    Donc je ne sais pas...
    Merci Encore pour l'aide.

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    L'objectif est de rechercher ce fameux vector dans la pile des appels pour voir d'où cela vient exactement. Pour le moment, on ne peut malheureusement pas t'en dire plus.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Par défaut
    En utilisant la pile des appels, la ligne sur laquelle pointe la flèche verte est correspondant à:
    TerrainDemo3.exe!std::vector<unsigned long,std::allocator<unsigned long> >::operator[](unsigned int _Pos=1759648) Ligne 760 + 0x8 octets C++
    Mais je ne comprends toujours pas (en fait je n'ai jamais lu une pile d'appels), il n'y a pas de référence à un de mes "vector"...
    Sinon l'instruction suivante correspond à l'appel
    d3dx9d_32.dll!006acb3e()... Merci encore une fois.

  8. #8
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Et qui appelle cet opérateur ?

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Par défaut
    S'il vous plait, Auriez-vous un tutoriel pour apprendre à lire la pile d'appels ? (c'est quelque chose que je n'ai jamais fait et dans mes livres d'apprentissage il n'y en pas).
    Sinon, est-ce qu'il faut suivre le code machine qui apparait et repérer les mots clés "call" apparaissant ?

  10. #10
    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
    Normalement sur la pile d'appels du debugger de Visual, les appelants sont en bas et les appelés en haut.
    Et tu peux double-cliquer sur une ligne représentant une fonction à toi pour aller au code source correspondant.
    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.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Par défaut
    Merci pour la réponse. Sur la ligne juste en-dessous de celle sur laquelle le programme s'arrête,il y a:
    d3dx9d_32.dll!006b1775()

  12. #12
    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
    Alors essaie de "remonter" encore plus, jusqu'à atteindre du code à toi.
    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.

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Par défaut
    Alors juste en-dessous, il y a:
    TerrainDemo3.exe!CLWater::CLWater(CLWater::InitInfo & initInfo={...}) Ligne 108 + 0x25 octets C++

    et lorsque je double-clique dessus, je suis renvoyé à :
    HR(g.Wmesh->GenerateAdjacency(EPSILON, adj));

  14. #14
    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
    Ce doit donc être cette fonction qui plante: Visiblement, cette fonction utilise un vector, et fait un mauvais accès. Donc, un des paramètres de la fonction doit être mauvais...
    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.

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Par défaut
    Merci. Et maintenant il ne me reste plus qu'à regarder en détail le code.

  16. #16
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    C'est de toute manière la conclusion à laquelle il fallait s'attendre, le code de DirectX est en général exempté de ce genre de bug

    Je te conseille de séparer en 2 ta ligne de code pour voir d'où vient l'erreur exactement.

  17. #17
    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
    Séparer quoi?
    Le bug se manifeste quand même dans la fonction de DirectX, même si c'est dans l'initialisation de ses paramètres qu'il se trouve...
    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.

  18. #18
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HR(g.Wmesh->GenerateAdjacency(EPSILON, adj));
    Pour moi, il y a deux fonctions et pour le moment aucun moyen de savoir quelle est la fonction responsable.

  19. #19
    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
    Je ne pense pas. À tous les coups, HR est une macro disant tout simplement "On verifie le HRESULT retourné par la fonction et on... fait un truc... si ça a foiré".

    Au passage, auron1, tu auras peut-être plus d'infos en activant la case à cocher dans les options:
    Tools -> Options -> Debugging -> Native -> Load DLL Exports.
    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.

  20. #20
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 267
    Par défaut
    Tu peux aussi activer le mode debug de directX, MenuDemarrer->DirectX SDK->DirectX Utilities->DirectX Control Panel et cocher le mode Debug (ainsi que les autres options si tu veux). Si ce programme n'est pas dans ton menu démarrer, il est sous "C:\Program Files\Microsoft DirectX SDK (August 2007)\Utilities\Bin\x86\dxcpl.exe"

    Voir aussi la FAQ DirectX sur le mode debug.

Discussions similaires

  1. Problem rencontré avec Les DataSet dans Visual Studio 2005?
    Par mehdi_scofield dans le forum ASP.NET
    Réponses: 0
    Dernier message: 14/11/2008, 11h40
  2. Help!! Probleme avec les dates sur SQL SERVER
    Par Nadaa dans le forum MS SQL Server
    Réponses: 16
    Dernier message: 03/08/2006, 16h55
  3. boost - Probleme avec compilateur C++ de visual studio 2005
    Par gilles641 dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 24/01/2006, 19h03
  4. probleme avec les string sur ITA2 64 bits!
    Par vince3320 dans le forum SL & STL
    Réponses: 5
    Dernier message: 22/08/2005, 19h59
  5. Problem avec les *.AVI sur les panels
    Par NaDiA_SoFt dans le forum C++Builder
    Réponses: 3
    Dernier message: 31/08/2003, 22h50

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