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

SL & STL C++ Discussion :

Out of range avec un Vector


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Mai 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 3
    Par défaut Out of range avec un Vector
    Bonjour, j'ai un petit soucis avec les vectors, voilà la portion de code :

    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
     
    ifstream file ("M.txt");
    char ligneTMP[1024];
    string ligne;
    vector <string> donnee;
     
    file.getline(ligneTMP, sizeof(ligne));
    ligne = ligneTMP;
     
    donnee.push_back( ligne.substr(0,8));
    donnee.push_back( ligne.substr(8,6));
    donnee.push_back( ligne.substr(14,4));
    donnee.push_back( ligne.substr(18,1));
    donnee.push_back( ligne.substr(19,3));
    donnee.push_back( ligne.substr(22,10));
    donnee.push_back( ligne.substr(32,10)); //***
    donnee.push_back( ligne.substr(42,1));
    Seulement a la ligne avec les *** le programme stop et une exception "out of range" est levé, mais pourquoi ?
    Lorsque je convertit le vector en list<string> il n'y a plus de "out of range", si quelqu'un a une idée de quelques chose que j'ai oublié ? (j'ai egalement testé vector<string> donnee (1024); mais l'erreur persiste

  2. #2
    Candidat au Club
    Inscrit en
    Mai 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 3
    Par défaut
    J'ai même une petite précision, c'est exactement une fois la ligne suivant exécuté que le programme leve l'exception ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    donnee.push_back( ligne.substr(24,10));

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Euh... Je ne crois pas que sizeof(std::string) soit très indiqué pour un getline...

    Je pense qu'en fait c'est tout simplement ta ligne qui se retrouve trop courte, d'où out_of_range dans le substr()...

    Edit: Devancé par harsh...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Candidat au Club
    Inscrit en
    Mai 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 3
    Par défaut
    Pas bète
    Pour le file.getline(ligneTMP,sizeof ...);
    J'avais pas dutout vue le problème ici en fait , j'ai modifié en file.getline(ligneTMP,1024);
    et ducoup je sais pas pourquoi mais sa fonctionne bien bien mieu
    Mais avant j'avais quand même modifié mon string en AnsiString afin d'utiliser la méthode .SubString() qui ne me mettait plus d'erreur. Vous m'avais donc résolu le problème en un temps reccord merci

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Citation Envoyé par snot224
    j'ai modifié en file.getline(ligneTMP,1024);
    Et si, plutôt que de t'embêter avec une taille, tu utilisais simplement std::getline(file, ligneTMP); ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    C'est sizeof ligneTMP qu'il faut faire...

  7. #7
    Membre confirmé Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Par défaut
    Je suis un heretique qui a du mal a ce mettre au string mais dit moi, dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    file.getline(ligneTMP, sizeof(ligne));
    tu t'attends a ce que sizeof te retourne quoi exactement??? tu ne sais donc pas combien d'octet tu lis
    ne te permet pas connaitre la taille de ton string et tu dois lire en dehors... "out of range"

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

Discussions similaires

  1. Erreur "vector subscript out of range" - OpenCV
    Par bblanchon dans le forum SL & STL
    Réponses: 3
    Dernier message: 07/06/2012, 13h42
  2. "out of range" error avec ReDim Preserve
    Par nianko dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/02/2011, 14h54
  3. Réponses: 1
    Dernier message: 19/08/2008, 08h44
  4. vector subscript out of range: qu'est-ce ?
    Par sa.mh dans le forum C++
    Réponses: 15
    Dernier message: 22/05/2008, 16h47
  5. vector subscript out of range
    Par nightwar dans le forum SL & STL
    Réponses: 2
    Dernier message: 14/03/2008, 18h35

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