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 :

Renvoyer un pointeur avec un cast ?


Sujet :

C

  1. #1
    Membre éclairé Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par défaut Renvoyer un pointeur avec un cast ?
    Bonjour,

    J'ai récupéré une fonction dont je ne suis pas bien sûr.
    Pour simplifier la fonction ressemble en gros à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    unsigned int fonction()
    {
      UneStructure *pointeur;
     
     ... //du code
     
      return (unsigned int)pointeur;
    }
    Puisque la valeur du pointeur est une adresse, le fait
    de faire un cast ne risque t-il pas de corrompre cette valeur ?

    Merci.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    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 391
    Par défaut
    En théorie, ça risque : Le type de retour devrait être intptr_t ou uintptr_t à la place (et peut-être qu'il faut explicitement caster le pointeur en void* avant, en plus. Je ne connais pas trop ce point-là).
    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.

  3. #3
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut
    Pour ma part je dirait que cela dépend du type de pointeur de ton architecture.

    Mais ce que tu fait reste du bricolage. As-tu une bonne raison de vouloir faire cela ???

    Qu'est ce que tu peut faire avec un unsigned int que tu ne peux pas avec un pointeur ?

  4. #4
    Membre éclairé Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par défaut
    Mais ce que tu fait reste du bricolage. As-tu une bonne raison de vouloir faire cela ???
    Cette fonction n'est pas de moi je l'ai récupéré dans un bouquin, et
    justement j'aimerais moi aussi savoir si son auteur a une bonne raison
    de faire ça.

    C'est une fonction qui utilise l'API Windows, le véritable type de retour est
    un DWORD (un unsigned int donc).
    Le principe de cette fonction est d'allouer de la mémoire
    pour une structure et d'initialiser ses membres.
    Je pense que le programmeur a voulu se simplifier la vie en faisant
    une pierre 2 coups.
    Si une erreur survient la fonction retourne le message
    d'erreur Windows (qui est un DWORD) correspondant.
    Si tout se passe bien la fonction retourne le pointeur via le cast.

    Maintenant je me demande s'il ne vaudrait pas mieux modifier tout
    ça et faire quelque chose d'un peu plus "safe".

  5. #5
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut
    Safe, je ne sais pas, mais lisible certainement !

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par tintin72 Voir le message
    J'ai récupéré une fonction dont je ne suis pas bien sûr.
    Pour simplifier la fonction ressemble en gros à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    unsigned int fonction()
    {
      UneStructure *pointeur;
     
     ... //du code
     
      return (unsigned int)pointeur;
    }
    Puisque la valeur du pointeur est une adresse, le fait
    de faire un cast ne risque t-il pas de corrompre cette valeur ?
    Horrible ! Rien ne dit que la valeur d'un pointeur puisse être représentée par un int (Par exemple, en x86 mode réel modèle de mémoire large, les pointeurs font 20-bit, sont codés sur 32-bit et les int font 16-bit). Faut pas faire n'importe quoi comme ça. Conception à revoir.

    Si tu retrouves le codeur qui a fait ça, tu lui fous 2 claques de ma part, ça le calmera...

  7. #7
    Membre éclairé Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par défaut
    Si tu retrouves le codeur qui a fait ça, tu lui fous 2 claques de ma part, ça le calmera...
    Je n'y manquerai pas

    Je tiens à préciser que ce bouquin (sorti il y a 10 ans environs) s'est
    très bien vendu et a même reçu un Award.
    Et après on s'étonne que les logiciels plantent...

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par tintin72 Voir le message
    Je tiens à préciser que ce bouquin (sorti il y a 10 ans environs) s'est
    très bien vendu et a même reçu un Award.
    Tu peux donner les références du bouquin ?
    Tu es sûr qu'il n'y a pas eu de corrigendum ?

  9. #9
    Membre éclairé Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par défaut
    Ce livre est uniquement disponible en anglais et je ne suis
    pas sûr qu'on puisse encore le trouver.
    http://www.maxmidi.com/
    Il y a eu des erratums en effet mais pas au niveau du code apparement.
    http://www.maxmidi.com/errata.html
    Ceci dit c'est le seul livre (à ma connaissance) qui explique, et plutôt
    bien, le principe du MIDI sous Windows et des fonctions multimedia
    de l'API.
    Il propose en plus le code détaillé et commenté d'un séquencer MIDI complet.
    Je ne vais donc pas lui jeter la pierre, mais ça prouve qu'il faut
    toujours être vigilant lorsqu'on récupère du code

Discussions similaires

  1. [C# 2.0] Renvoyer un identifiant avec une ComboBox
    Par sqlnoob dans le forum Windows Forms
    Réponses: 11
    Dernier message: 09/10/2007, 20h36
  2. Renvoyer des pointeurs pour du c.
    Par lolobubu40 dans le forum C++
    Réponses: 2
    Dernier message: 19/07/2006, 18h49
  3. problème de pointeur avec les listes chainees
    Par innosang dans le forum C
    Réponses: 9
    Dernier message: 30/12/2005, 15h46
  4. Problèmes de pointeurs avec les arbres
    Par thierry57 dans le forum C
    Réponses: 17
    Dernier message: 22/12/2005, 23h35
  5. Problème de pointeur avec un TQuery
    Par Oluha dans le forum Bases de données
    Réponses: 3
    Dernier message: 25/01/2005, 13h57

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