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 averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2012
    Messages : 18
    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 émérite
    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
    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 averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2012
    Messages : 18
    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 émérite
    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
    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 averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2012
    Messages : 18
    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