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 :

Comment savoir si un pointeur a été delete ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 19
    Par défaut Comment savoir si un pointeur a été delete ?
    Hello, j'aimerais pouvoir tester si un pointeur *p a était delete (via delete p; ).
    Je sais que normalement, on ne devrait pas avoir a tester ce genre de chose, mais la n'est pas la question. Je sais également qu'il existe _CrtIsValidPointer sous windows, mais j'aimerais sous équivalent sous unix pour gcc.

    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 124
    Par défaut
    Tu peux pas coder ta propre fonction ?
    Tu surcharge l'opérateur delete et tu donnes la valeur NULL a un pointeur ?
    C'est pas si difficile...

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2008
    Messages : 308
    Par défaut
    pas bête

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 19
    Par défaut
    A vrai dire, j'ai déja essayer de surcharger l'operateur delete pour mettre ma variable p = NULL, mais une fois en dehors de la fonction delete, p retournée la valeur d'origine

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 124
    Par défaut
    C'est etrange...
    Montre le code ?
    Ou fait toi une macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define SAFE_DELETE(a) { delete (a); (a) = NULL; }

  6. #6
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    A priori, sans un support du runtime (ce qui est le cas dans Windows avec _CrtIsValidPointer) ou sans macro comme celle proposée ci-dessus, tu n'as aucun moyen de savoir si un pointeur est encore valide ou pas, pour la simple et bonne raison que l'adresse qu'il contient EST une adresse valide et accessible (=pas de "segmentation fault")... Les données contenues sont certes aberrantes et/ou celles d'un autre objet, OK, mais le pointeur reste intrinsèquement "valide" pour le processus courant !!
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  7. #7
    screetch
    Invité(e)
    Par défaut
    euh oui et non, la mémoire peut ne plus appartenir au processus selon ce que fait "new" et "delete", ce n'est vraiment plus valide

    pour la macro delete, pourquoi pas plutot une fonction template que cette vilaine macro ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    template< typename T >
    void safe_delete(T* & ptr)
    {
      delete ptr;
      ptr = 0;
    }

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

Discussions similaires

  1. Comment savoir si on a les acces read/write/delete sur un répertoire ?
    Par noooop dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 10/05/2010, 16h28
  2. Comment savoir qu'un objet est delete
    Par yupa dans le forum C++
    Réponses: 11
    Dernier message: 25/10/2007, 17h04
  3. comment savoir ce que fait mon pointeur??
    Par elekis dans le forum C++
    Réponses: 9
    Dernier message: 30/11/2004, 12h42
  4. Réponses: 9
    Dernier message: 11/03/2003, 12h22
  5. Réponses: 4
    Dernier message: 10/09/2002, 17h09

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