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 :

ET logique sur pointeur ne fonctionne pas


Sujet :

C++

  1. #1
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut ET logique sur pointeur ne fonctionne pas
    Bonjour tout le monde !
    Afin de vérifier l'alignement mémoire, je fais un ET logique sur un pointeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (!(my_ptr & 0xFFFFFFFC))
    {
    ...
    }
    Seulement, à la compilation, j'ai le droit à un magnifique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    illegal, left operand has type 'void *'
    J'ai essayé avec un pointeur de type int* mais ça ne change rien.
    J'étais pourtant persuadé d'avoir le droit de faire cela...

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Non. Les operateurs logiques ne sont definis que pour les types entiers.

  3. #3
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Eh bien, j'ai tenté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int *lpPtr = (int *)my_ptr;
    if (!(lpPtr & 0xFFFFFFFC))
    {
      ...
    }
    Mais j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '&' : illegal, left operand has type 'int *'
    Pourtant, int est un type entier...

  4. #4
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    int* n'est pas un type entier, c'est un pointeur vers un entier.

  5. #5
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Comment résoudre mon problème dans ce cas...
    J'ai absolument besoin de faire cela...

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int IntPtr = reinterpret_cast<int>(my_ptr);
    Attention par contre, je ne suis pas sûr que int soit garanti de pouvoir contenir la plage de valeurs d'un pointeur. Il doit y avoir un type défini pour ça, mais je ne m'en souviens pas.

  7. #7
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Converti ton pointeur en un entier (uintptr_t est le meilleur candidat si tu en disposes) fais tes operations et revient vers le pointeur.

  8. #8
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Merci !
    Ca fonctionne mieux .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. window.location.href.replace sur ie6 ne fonctionne pas
    Par taka10 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 19/02/2009, 14h52
  2. Réponses: 2
    Dernier message: 14/04/2008, 20h06
  3. [SystemTray][TrayIcon] mouseEntered sur TrayIcon ne fonctionne pas?
    Par kayzra dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 05/01/2008, 17h05
  4. Réponses: 8
    Dernier message: 25/06/2007, 15h07
  5. Index sur datetime ne fonctionnant pas
    Par Pierrinot dans le forum Requêtes
    Réponses: 5
    Dernier message: 18/10/2004, 10h10

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