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 :

Pointeur sur fonction et allocation mémoire


Sujet :

C++

  1. #1
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Juillet 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2004
    Messages : 289
    Points : 635
    Points
    635
    Par défaut Pointeur sur fonction et allocation mémoire
    Bonjour à tous,

    Dans la famille des expériences tordues avec des pointeurs de fonction, j'ai une petite colle.
    Je récupère une adresse mémoire d'une fonction dans une Dll au préalablement chargée par mes soins via "LoadLibrary".

    Bon déjà je ne sais pas si j'aurais toujours la même adresse (le même pointeur) si je cherche 2 fois la même fonction ... mais à part ça je me rends compte que ce pointeur n'est jamais deleté. Ca me parait "assez" normal vu qu'il n'a jamais été alloué sinon via "LoadLibrary".

    D'où question à 2€ du soir : l'appel à "FreeLibrary" va-t-il "libérer cet espace mémoire" et donc entraîner des indirections avec mes pointeurs ?

    (comme je sens que je ne suis pas très clair n'hésitez pas à me le dire je reformulerai demain matin)

    Merci d'avance
    JS

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Quand tu fais FreeLibrary, ça enlève la DLL de ton espace mémoire.
    Donc oui, tes pointeurs de fonction ne sont plus valides, ça parait évident.
    Boost ftw

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Quand tu fais LoadLibrary(), tu ajoutes dans l'espace mémoire de ton process l'espace mémoire de ta DLL.

    Ensuite, tu as des pointeurs de fonction, que tu as probablement initialisé par GetProcAddress(), qui pointent dans l'espace mémoire de ta DLL.

    Lorsque tu fais FreeLibrary(), tu enlèves de l'espace mémoire de ton process l'espace mémoire de ta DLL. Par contre, les pointeurs existent toujours, ils pointent sur un espace qui n'existe plus, donc DANGER, il ne faut plus les utiliser sinon, c'est le crash assuré.

    Citation Envoyé par Captain_JS Voir le message
    et donc entraîner des indirections avec mes pointeurs ?
    Pas compris le sens de cette remarque, des explications STP
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 243
    Points : 36 701
    Points
    36 701
    Par défaut
    Bon déjà je ne sais pas si j'aurais toujours la même adresse (le même pointeur) si je cherche 2 fois la même fonction ... mais à part ça je me rends compte que ce pointeur n'est jamais deleté. Ca me parait "assez" normal vu qu'il n'a jamais été alloué sinon via "LoadLibrary".
    Une fois que la librairie a été chargée le retour de GetProcAddress() sera constant. Si on décharge et recharge la librairie, il sera a priori différent.
    Il n'y a pas de bonnes raisons non plus pour que la librairie soit chargée dans la même zone d'adresse lorsque la librairie est chargée dans deux programmes différents.

    Le pointeur dans lequel sera stocké l'adresse retournée par GetProcAddress() ne sera jamais détruit. Par contre, le contenu de l'adresse ne sera plus valide après avoir déchargé la librairie.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Je ne sais pas si ca a beaucoup de sens de delete un pointeur de fonction (hormis les cas hyper rare de code dynamique généré à la volé). C'est plutôt lié à l'espace mémoire où est chargé le code, donc dans ton cas directement lié au LoadLibrary/FreeLibrary

Discussions similaires

  1. Réponses: 10
    Dernier message: 03/02/2005, 14h09
  2. Réponses: 5
    Dernier message: 12/01/2005, 21h58
  3. pointeurs sur fonction en C++
    Par cemoi dans le forum C++
    Réponses: 7
    Dernier message: 29/11/2004, 14h19
  4. [langage] Pointeur sur fonction
    Par Fanch.g dans le forum Langage
    Réponses: 2
    Dernier message: 02/10/2004, 11h43
  5. Declaration de fonction retournant un pointeur sur fonction
    Par pseudokifaitladifférence dans le forum C
    Réponses: 5
    Dernier message: 11/08/2003, 20h37

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