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 vector resize


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2010
    Messages : 18
    Par défaut Problème vector resize
    Bonjour tout le monde!

    J'ai un petit problème qui conduit à un runtime error, mais je n'ai aucune idée de la raison. J'ai essayé de cibler le problème en utilisant des flags un peu partout dans mon code, et il semblerait que ce soit dû à un resize effectué sur un vector (qui appartient à une structure). J'ai affiché le paramètre que je passe à resize, et celui-ci est 1. Si quelqu'un pouvait m'aider, merci d'avance.

    Voici les différentes portions de codes qui me semblent importantes (top est aussi de type node):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    struct node
    {
        node(){}
        vector<short> ensemble_restant;
        vector<short> pin_preparation;
        int done;
    };
     
    {
        node new_top;
        new_top.done=top.done;
        new_top.ensemble_restant.resize(top.ensemble_restant.size()-1);
        copy(top.ensemble_restant.begin(),top.ensemble_restant.begin()+c,new_top.ensemble_restant.begin());
        copy(top.ensemble_restant.begin()+c+1,new_top.ensemble_restant.end(),new_top.ensemble_restant.begin()+c);
        int taille=top.pin_preparation.size();
        cout<<"flag1"<<endl;
        new_top.pin_preparation.resize(taille);
        cout<<"flag2"<<endl;
         copy(top.pin_preparation.begin(),top.pin_preparation.end(),new_top.pin_preparation.begin());
        new_top.pin_preparation.push_back(top.ensemble_restant[c]);
        sort(new_top.pin_preparation.begin(),new_top.pin_preparation.end());
        to_do.push_back(new_top);
     
    }
    Lors de l'exécution, flag1 s'affiche une seule fois et flag2 0 fois (donc c'est dès la première exécution de ce bloc qu'il y a un problème). De plus, même si mon code est très gourmand en mémoire, au moment où le runtime error se produit, peu de mémoire est utilisé.

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    Ta fonction/méthode me semble assez compliqué pour ce quelle fait.
    Pourquoi ne pas faire un constructeur par copie pour ta structure node ?


    Tu construit new_top à partir de top.
    Tu as juste à récupérer ton c ième élément et à faire un erase sur ensemble_restant.
    Et ensuite un simple insert sur pin_preparation suffira.

    Sinon dans ton cas, ne vaut-il mieux pas utiliser un std::list plutôt qu'un std::vector ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2010
    Messages : 18
    Par défaut
    Effectivement, c'est une bonne idée.
    J'y vais un peu trop à la bourrin pour commencer, et ensuite je remanie toute l'architecture du programme.
    Je vais déjà voir si ça change quelque chose pour les erreurs, ou bien si ça me permet de comprendre d'où ça vient

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2010
    Messages : 18
    Par défaut
    C'est bon, je n'ai plus aucun problème. J'ai même le reste du code qui fonctionne, ce à quoi je ne m'attendais pas vraiment.
    Merci beaucoup

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

Discussions similaires

  1. Problème Vector Java
    Par PP(Team) dans le forum Général Java
    Réponses: 6
    Dernier message: 19/02/2010, 17h40
  2. std::vector<>.resize et exception
    Par camboui dans le forum C++
    Réponses: 9
    Dernier message: 09/10/2009, 11h28
  3. problème vector nouvelle version
    Par Nikolai dans le forum C++
    Réponses: 8
    Dernier message: 08/07/2009, 11h20
  4. performance allocation vector - resize
    Par befalimpertinent dans le forum SL & STL
    Réponses: 7
    Dernier message: 16/01/2008, 10h05

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