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 :

Problème de copie d'une variable - je crois que ça viendrait de l'assembleur


Sujet :

Visual C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 8
    Par défaut Problème de copie d'une variable - je crois que ça viendrait de l'assembleur
    Ok voila le bout de code que j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    long *a = &(cgm.o->m_metafileVersion);
    rien de complexe...
    je mets un point d'arret dans l'instruction juste après et quand je regarde dans le watch de visual :
    a = 0x053e3d50
    &(cgm.o->m_metafileVersion) = 0x053e3d28

    normalement quand on copie une adresse dans un pointeur, l'adresse, du coup.... c'est la meme non?

    Ou alors je dois ré-ouvrir mes cahiers?


    ps : je n'utilise a priori pas de threads suceptibles de modifier ces valeurs

  2. #2
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Le Garbage Collector peut éventuellement changer les adresses. Pour éviter ça, utiliser le mot-clé fixed : http://msdn.microsoft.com/en-us/libr...v=vs.100).aspx

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par GuruuMeditation Voir le message
    Le Garbage Collector peut éventuellement changer les adresses. Pour éviter ça, utiliser le mot-clé fixed : http://msdn.microsoft.com/en-us/libr...v=vs.100).aspx
    Oui, sauf que ça a pas l'air d'être du C#

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 8
    Par défaut
    Ouais voilà c'est pas du C++, j'essai de descendre dans les instructions de l'assembleur mais jpige pas grand chose.

    Quelqu'un a une idée?

  5. #5
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 527
    Par défaut
    Citation Envoyé par GuruuMeditation Voir le message
    Le Garbage Collector peut éventuellement changer les adresses. Pour éviter ça, utiliser le mot-clé fixed : http://msdn.microsoft.com/en-us/libr...v=vs.100).aspx
    il y a une erreur ; on est en C++ natif et pas managed

  6. #6
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 527
    Par défaut
    Citation Envoyé par ArnaudCas Voir le message
    rien de complexe...
    je mets un point d'arret dans l'instruction juste après et quand je regarde dans le watch de visual :
    a = 0x053e3d50
    &(cgm.o->m_metafileVersion) = 0x053e3d28

    normalement quand on copie une adresse dans un pointeur, l'adresse, du coup.... c'est la meme non?
    oui c'est tout à fait exact on devrait avoir les mêmes adresses mémoires.
    Maintenant reste à voir le contexte..

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 8
    Par défaut
    Ah ok... maiiis du coup, comment je pourrait débugguer un truc pareil... j'ai jamais eut le cas

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 8
    Par défaut
    Le contexte hmmm...

    ben, j'ai acheté une lib, qui va lire un certain format d'image et qui fait du "marshalling" (je crois que c'est comme ça que ça s'appelle hein?), genre elle lit le fichier et rempli une structure C++ avec les info qu'elle a trouvé.

    Donc c'est cool, sauf que quand je veux copier les valeurs, pour les utiliser, ben ça copie n'importe quoi (pour le débugger de visual affiche la bonne valeur, c'est ultra dingue)

    du coup, je suis allé regardé du coté des adresses mémoires (comme avec le code plus haut) et pareil :

    A croire que c'est Visual qui n'est pas foutu de copier une adresse, m'enfin ça me parait bizarre

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 8
    Par défaut
    Du coup, j'imagine que personne ne peut trop m'aider. Mais je sais même pas vers qui aller ou meme vers quoi me documenter.
    Vous avez pas le numéro du chef de projet de Visual Studio?

  10. #10
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 527
    Par défaut
    Citation Envoyé par ArnaudCas Voir le message
    Donc c'est cool, sauf que quand je veux copier les valeurs, pour les utiliser, ben ça copie n'importe quoi (pour le débugger de visual affiche la bonne valeur, c'est ultra dingue)

    du coup, je suis allé regardé du coté des adresses mémoires (comme avec le code plus haut) et pareil :

    A croire que c'est Visual qui n'est pas foutu de copier une adresse, m'enfin ça me parait bizarre
    salut Arnaud je ne comprends vraiment pas pourquoi tu veux copier des adresses mémoires.
    Utilises-tu une dll ?
    Ne pas perdre de vue aussi qu'une adresse mémoire elle peut bouger avec le temps,Windows par soucis d'optimisation peut déplacer des blocs de mémoire

  11. #11
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Bonjour.

    Citation Envoyé par ArnaudCas Voir le message
    Du coup, j'imagine que personne ne peut trop m'aider. Mais je sais même pas vers qui aller ou meme vers quoi me documenter.
    Vous avez pas le numéro du chef de projet de Visual Studio?
    Ce qui est certain, c'est que ce n'est pas un problème de visual studio. En effet, lorsque je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void main(){
     
    long b = 2012;
     
    long* a = &b;
    }
    La valeur de a vaut bien la valeur &b. Tu devrais vérifier ce simple test.

    Si le problème persiste, réinstaller Visual et surtout vérifier le matériel (mémoire vive notamment).

    Si le test est bon, je pense plutôt à une mauvaise utilisation de la dll. Mais pour t'aider il faudrait que nous puissions reproduire le problème.

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 8
    Par défaut
    Alors,
    je ne comprends vraiment pas pourquoi tu veux copier des adresses mémoires
    ben imaginons que je veuilles faire pointer long *a vers cgm.o->m_metafileVersion, j'ai le droit? ben dans mon cas ça ne fonctionne pas!

    Et alors oui, j'utilise un .lib, mon programme est en 2 partie, un noyau et une interface graphique cgm.o est une variable du noyau dont le type provient d'une lib que j'utilise.

    Evidemment le problème ne vient pas de visual, et le test dont Moldavi me parle marche très très bien et lorsque je fais un long *a = &(cgm.o->m_metafileVersion); dans un autre programme (sans .lib pour l'interface graphique, ça fonctionne aussi) donc effectivement je me dis que ça vient peut être de là. Mais pourquoi?

    Jvais faire des tests, jvous tiens au courant! merci!

  13. #13
    screetch
    Invité(e)
    Par défaut
    c'est vraiment le code que tu nous montre la, que tu arrives pas a faire marcher?
    c'est quoi le type de cgm et de cgm.o?

  14. #14
    screetch
    Invité(e)
    Par défaut
    une possibilite c'est que cgm.o (quel que soit le type) redefinisse l'operateur -> pour renvoyer quelque chose d'autre, peut etre meme quelque chose de temporaire, du coup lorsque tu essayes de prendre l'adresse il prend une adresse temporarire. Pas sur evidemment, mais avec le peu de code que tu donnes, pas facile de dire mieux!

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/09/2006, 12h22
  2. problème de ddénomination d'une variable
    Par baudmail dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 28/04/2006, 12h52
  3. Problème d'appels d'une variable entre fonctions
    Par julien.nasser dans le forum MFC
    Réponses: 12
    Dernier message: 26/04/2006, 09h23
  4. Problème de restitution d'une variable.
    Par flyflo dans le forum C++
    Réponses: 4
    Dernier message: 22/01/2006, 15h10
  5. Réponses: 1
    Dernier message: 21/12/2005, 19h08

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