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 :

Problème de pointeurs


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2012
    Messages : 18
    Points : 15
    Points
    15
    Par défaut Problème de pointeurs
    Bonsoir,

    alors voici mon problème : j'ai une liste l de pointeurs sur des objets. Les objets sont ici des noeuds.
    Lorsque je fais un delete l.back() je peux toujours accéder par la suite à l'élément supprimer en faisant (*l.back()).getNumero() par exemple.

    Je ne comprends pas pourquoi alors que normalement je ne devrai plus pouvoir y accéder. J'ai bien regarder dans la fac mais je ne trouve rien qui m'aide.

    Merci par avance de votre aide.

    Aurelien2201

  2. #2
    Membre éclairé
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Points : 879
    Points
    879
    Par défaut
    Il faudrait plutôt utiliser une liste fournie par boost.pointer_container ; ce qui éviterait la gestion de la mémoire.

    Ou bien utiliser des shared/unique_ptr au lieu de pointeurs purs.

    Et, là, la question ne se poserait même plus.

    (Au passage, l'artefact que tu remarques vient de ta plate-forme, et risque même de ne plus fonctionner après une mise à jour - et ne marchera probablement pas sous un autre OS / compilateur / jeu d'optimisations.)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2012
    Messages : 18
    Points : 15
    Points
    15
    Par défaut
    Merci pour la rapidité de votre réponse mais, du coup est ce que la mémoire à bien été libérée?

    Pour palier à ça après avoir désallouer la mémoire je fais un pop_back mais c'est du bricolage...

    Je vais regarder avec vos indications

    aurelien2201

  4. #4
    Membre éclairé
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Points : 879
    Points
    879
    Par défaut
    La mémoire est bien libérée après l'appel à delete ; même si elle reste disponible.

    En fait, c'est une optimisation que de ne pas effacer toute la mémoire disponible à l'appel à delete. Celui-ci sert alors simplement à indiquer à l'OS qu'il peut récupérer la mémoire dès qu'il le souhaite.

    Pour l'appel à pop_back, il est en effet préférable d'appeller pop_back après le delete. Parce que sinon on se retrouve avec un dangling pointer, c'est-à-dire un pointeur qui pointe dans le néant. Et ça, c'est risqué.

    Au passage, utiliser une des solutions que je proposais dans mon post précédent permettrait de ne plus avoir à faire de delete et de faire directement liste.pop_back(). De plus, elle permettrait de gagner l'exception safety, c'est-à-dire la résistance aux exceptions ; ce qui permettrait de ne pas avoir à se soucier de tous les try{} catch{} à chaque utilisation de la liste.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2012
    Messages : 18
    Points : 15
    Points
    15
    Par défaut
    Je vous remercie de m'avoir renseigné aussi rapidement et aussi efficacement.

    Maintenant mon code marche et je vais tester les améliorations que vous m'avez suggéré.

    Encore merci.

    Aurelien2201

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

Discussions similaires

  1. Problème de pointeurs..embrouillé
    Par Frenchy dans le forum C++
    Réponses: 11
    Dernier message: 10/03/2005, 16h33
  2. 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
  3. Problème de pointeur
    Par toma_lille dans le forum C++
    Réponses: 1
    Dernier message: 07/12/2004, 21h26
  4. [MFC] Problème de pointeur !!
    Par acastor dans le forum MFC
    Réponses: 7
    Dernier message: 19/03/2004, 15h50
  5. TBitmap et problèmes de pointeurs...
    Par benj63 dans le forum C++Builder
    Réponses: 8
    Dernier message: 28/07/2003, 13h39

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