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 :

push après un new


Sujet :

C++

  1. #1
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut push après un new
    Bonjour

    Je continue a nettoyer le code de mon application et je butte sur un problème nouveau. Je dois pousser dans une liste trois données et mon programme plante à la deuxième: voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      std::list<std::wstring>* wsListEndSentPos;    //list of POS label which point out end of sentence
      std::list<std::wstring>::iterator itSentPos;
      std::list<std::wstring>* wsListEndSentPosDefault; // list of POS label with default value
      m_bOptionProblem = false;
      int pos;
      wsListEndSentPos = new std::list<std::wstring>;
      wsListEndSentPosDefault = new std::list<std::wstring>;
      wsListEndSentPosDefault->push_back(L".");         // Default values of end of sentence
      wsListEndSentPosDefault->push_back(L"?");         // Default values of end of sentence
      wsListEndSentPosDefault->push_back(L"!");         // Default values of end of sentence
    qui me donnera le conseil pour tourner cette difficulté, ce sera

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Pourquoi utiliser des pointeurs de listes ?

  3. #3
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    Par défaut
    Ca va pas mieux en initialisant explicitement ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wsListEndSentPosDefault = new std::list<std::wstring>();
    (au passage: je rejoins Davidbrcz pour te demander : pourquoi des objets dynamiques ?)

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    Je rejoins mes deux compères, surtout en ce qui concerne wsListEndSentPos...

    Si l'on s'en réfère au commentaire, ce n'est "rien d'autre" qu'un itérateur pointant sur... la fin de la liste.

    Tu devrais donc utiliser l'itérateur ou l'itérateur constant et l'initialiser sur... la fin de la liste (malist.end(), ou, pour suivre l'exemple, vraisemblablement wsListEndSentPosDefault.end(), du moins aussi vite que possible une fois qu'elle existe )

    Et, de manière générale, les conteneurs de la STL sont, justement, créés pour éviter de manipuler des pointeurs et la gestion dynamique de la mémoire chaque fois que ce n'est pas strictement indispensable.

    Il n'y a donc aucune raison à déclarer wsListEndSentPosDefault comme étant un pointeur, à moins qu'il ne soit en réalité question d'avoir une référence vers une liste qui existe par ailleurs.

    Mais, dans ce cas, il faut veiller à ce que, lorsque la liste référencée est effectivement détruite (principalement parce que l'objet dans lequel elle aparait effectivement est détruit) le pointeur soit remis à NULL (en n'oubliant pas de tester ce fait avant d'essayer de l'utiliser).

  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
    Salut,
    Je ne vais pas en rajouter une couche sur l'allocation dynamique de la classe liste même si je n'en pense pas moins. Juste pour dire que ton code marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      wsListEndSentPosDefault = new std::list<std::wstring>;
      wsListEndSentPosDefault->push_back(L".");         // Default values of end of sentence
      wsListEndSentPosDefault->push_back(L"?");         // Default values of end of sentence
      wsListEndSentPosDefault->push_back(L"!");         // Default values of end of sentence
    Ton problème doit être ailleurs. As-tu la fonction complète ?

Discussions similaires

  1. Apple, champion de l'évasion fiscale d'après le New York Times
    Par Gordon Fowler dans le forum Actualités
    Réponses: 24
    Dernier message: 06/05/2012, 10h31
  2. Libérer mémoire après un new
    Par walloey dans le forum C#
    Réponses: 6
    Dernier message: 17/02/2012, 15h35
  3. Réponses: 1
    Dernier message: 27/10/2009, 10h46
  4. ouverture new page apres validation formulaire
    Par jameson dans le forum Langage
    Réponses: 5
    Dernier message: 19/06/2008, 13h04

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